2017-05-21 4 views
0

나는 딕테이션 배열을 가지고 있습니다. 나는 결과가 데이터에 따라 다르기 때문에 얼마나 많은 딕테이션이이리스트에 포함되는지 알지 못한다. 나는 그것들의 가치로 공통점을 찾아야 만합니다. 일단 공통점을 발견하면 동일한 가치를 지닌 사전을 병합하고이 가치의 빈도를 계산해야합니다.파이썬 : 여러 개의 딕테이션 배열에서 공통점 찾기

이것은 샘플 데이터입니다.

[ 
{ 
    "id": 100 
    "category": null, 
    "mid": null 
}, 
{ 
    "id": 100 
    "city": "roma" 
    }, 
    { 
    "id": 100 
    "category": null, 
    "mid": null 
}, 
{ 
    "id": 100 
    "city": "roma" 
    }, 
{ 
    "id": 200 
    "category": "red", 
    "mid": null 
    }, 
    { 
    "id": 200 
    "region": "toscany" 
    }, 
{ 
    "id": 300 
    "category": "blue", 
    "mid": "cold", 
    "sub": null 
    }, 
{ 
    "id": 400 
    "category": "yellow", 
    "mid": "warm" 
    }, 
{ 
    "id": 400 
    "city": "milano" 
    } 
] 

예상 결과는 이와 같아야합니다.

[ 
{ 
    "id": 100 
    "category": null, 
    "mid": null, 
    "city": "roma" 
    "count": 2 
}, 
{ 
    "id": 200 
    "category": "red", 
    "mid": null, 
    "region": "toscany", 
    "count": 1 
    }, 
{ 
    "id": 300 
    "category": "blue", 
    "mid": "cold", 
    "sub": null, 
    "count": 1 
    }, 
{ 
    "id": 400 
    "category": "yellow", 
    "mid": "warm", 
    "city": "milano", 
    "count": 1 
    } 
] 

두 개의 dicts에서 공통점을 찾는 방법을 알고 있지만 여러 dicts는 모릅니다. 어쩌면 항목()을 사용하여 동일한 값을 찾고 chainmap()을 병합 할 수 있지만 지금까지는 예상 결과에 실패했습니다.

편집 단 두 개의 딕트가있을 때 내가 한 것.

a={ 
    "id": 100, 
    "category": null, 
    "mid": null 
} 
b={ 
    "id": 100, 
    "city": "roma" 
    } 
def grouping_records(): 
    rows.sort(key=itemgetter('id')) 
    for date, items in groupby(rows, key=itemgetter('id')): 
     print(id) 
     for i in items: 
       print(' ', i) 

if __name__ == "__main__": 
    grouping_records() 
+0

"나는 두 dicts에서 공통점을 찾는 방법을 알고있다"-이 작업을 수행 할 어떻게 보여줄 수 있으므로, 우리는 당신이 당신의 논리를 일반화하는 것에 대해 생각하도록 도울 수 있습니까? – THK

+0

빈도 란 정확히 무엇입니까? 어떤 값을 계산해야합니까? – Elisha

+0

id 100 count가 2 인 이유를 설명 할 수 있습니까? 같은 이드와 다른 사전을 셀 수 있습니까? 또는 각 사전의 최대 또는 최소 반복 횟수를 계산할 수 있습니까? 그렇지 않습니다. 아래 솔루션을 제안 적어도 (당신이 절대 groupby를 사용하지 않는 한) – Serge

답변

1

GROUPBY 우리의 많은 비트 복잡,이 순진 해결 방법을 시도해보십시오

mylist = [dict(s) for s in set(frozenset(d.items()) for d in original)] # remove dublicate dictionaries if needed 
ids = set([d['id'] for d in mylist]) 
id_cnt = {id: {"count": ids.count(id)} for id in ids } 
for d in mylist: 
    id = d['id'] 
    id_cnt[id].update(d) 
result = id_cnt.values()