2017-12-20 14 views
0

에 의해 두 사전을 결합하는 방법은 두 dicts이 있습니다파이썬은 키

A={'a':{"total":5,"all":[100,101]},'b':{"total":10,"all":[200,201]}} 
B={'a':{"q1":"a","q2":"aa"},'b':{"q1":"b"},'c':{"q1":"c","q2":"ccc"}} 

내가 그들의 키 (를 A, B, C) 다음과 같은 기준으로 dicts의 모든 값을 결합 :

import collections 
super_dict = collections.defaultdict(set) 
for k, v in chain(A.items(), B.items()): 
    #related_datasets = v.get("all") 
    #total_downloads = v.get("total") 
    #query_1 = v.get("q1") 
    #query_2 = v.get("q2") 
    super_dict.setdefault(k, []).append(v) 

defaultdict(set, 
      {'a': [{'all': [100, 101], 'total': 5}, {'q1': 'a', 'q2': 'aa'}], 
      'b': [{'all': [200, 201], 'total': 10}, {'q1': 'b'}], 
      'c': [{'q1': 'c', 'q2': 'ccc'}]}) 

는 그러나, 나는 다음과 같이 super_dict을 생산하려면 :

이것은 (super_dict)의 결과

{'a': {'all': [100, 101], 'q1': 'a', 'q2': 'aa', 'total': 5}, 
'b': {'all': [200, 201], 'q1': 'b', 'total': 10}, 
'c': {'q1': 'c', 'q2': 'ccc'}} 

도움이 되겠습니다.

import collections 
super_dict = {} 
for k, v in chain(A.items(), B.items()): 
    related_datasets = v.get("all") 
    total_downloads = v.get("total") 
    query_1 = v.get("q1") 
    query_2 = v.get("q2") 
    vkeys = v.keys() 
    if k in super_dict.keys(): 
     super_dict[k].update(v) 
    else: 
     super_dict[k]= v 

답변

3

당신은 가까웠다 :

A={'a':{"total":5,"all":[100,101]},'b':{"total":10,"all":[200,201]}} 
B={'a':{"q1":"a","q2":"aa"},'b':{"q1":"b"},'c':{"q1":"c","q2":"ccc"}} 

from itertools import chain 
import collections 
super_dict = collections.defaultdict(dict) 
for k, v in chain(A.items(), B.items()): 
    super_dict[k].update(v) 
super_dict 
+0

이것은 훨씬 간단합니다! 고마워요. – kitchenprinzessin

+0

사실 더 간단합니다. 편집을 참조하십시오 ... – Julien

1
A={'a':{"total":5,"all":[100,101]},'b':{"total":10,"all":[200,201]}} 
B={'a':{"q1":"a","q2":"aa"},'b':{"q1":"b"},'c':{"q1":"c","q2":"ccc"}} 

d = {} 

for key in set(A.keys() + B.keys()): 
    try: 
     d.setdefault(key,{}).update(A[key])   
    except KeyError: 
     pass 

    try: 
     d.setdefault(key,{}).update(B[key])   
    except KeyError: 
     pass 

print d 

출력 :

{'a': {'q1': 'a', 'q2': 'aa', 'all': [100, 101], 'total': 5}, 'c': {'q1': 'c', 'q2': 'ccc'}, 'b': {'q1': 'b', 'all': [200, 201], 'total': 10}} 
0
A={'a':{"total":5,"all":[100,101]},'b':{"total":10,"all":[200,201]}} 
B={'a':{"q1":"a","q2":"aa"},'b':{"q1":"b"},'c':{"q1":"c","q2":"ccc"}} 

C = {} 

C['a'] = {**A['a'], **B['a']} 
C['b'] = {**A['b'], **B['b']} 
C['c'] = {**B['c']} 

print(C) 
012,351,641 내가 해결책을 찾았 확인

최신 버전의 Python-C를 사용하여 인쇄 한 결과 ( super_dict).
{ '모두': [100, 101], 'q1': 'a', 'q2': 'aa', 'total': 5},
'b': { '모두 ': [200, 201],'q1 ':'b ','total ': 10},
'c ','q1 ':'ccc '}

+0

이 경우 사전에 모든 키를 알아야합니다. – kitchenprinzessin