2017-09-18 12 views
1

기본적으로 작업을 효율적으로 수행하기 위해이 요청을했지만 실제로 사용하고있는 데이터 구조가 맞지 않습니다.키가있는 경우 중첩 된 dict에서 dict 값 빼기

첫 번째 DICT :

f_dict = {'n1':{'x':1,'y':1,'z':3},'n2':{'x':6,'y':0, 'z':1}, ...} 
s_dict = {'x':3,'t':2, 'w':6, 'y':8, 'j':0, 'z':1} 

내가 가져올 e 같은 것을 :

e = {'n1':{'x':-2,'y':-7,'z':1},'n2':{'x':3,'y':-8,'z':0}, ...} 
+0

예제를 실제 파이썬 사전으로 바꾸십시오. BTW, 힌트 : x - 0 == x. 당신은 dict에있는 값을 항상 확인하고 디폴트's_dict.get ('a', 0)'을 제공 할 수있다. – pazqo

답변

0

당신은 중첩 된 사전 이해를 사용하고이에 (값 또는 디폴트 값을 뺄 dict.get를 사용할 수 있습니다 사례 0) :

>>> {key: {ikey: ival - s_dict.get(ikey, 0) 
...  for ikey, ival in i_dct.items()} 
... for key, i_dct in f_dict.items()} 
{'n1': {'x': -2, 'y': -7, 'z': 2}, 'n2': {'x': 3, 'y': -8, 'z': 0}} 

명시 적 루프 :

res = {} 
for key, i_dict in f_dict.items(): 
    newdct = {} 
    for ikey, ival in i_dict.items(): 
     newdct[ikey] = ival - s_dict.get(ikey, 0) 
    res[key] = newdct 

print(res) 
# {'n1': {'x': -2, 'y': -7, 'z': 2}, 'n2': {'x': 3, 'y': -8, 'z': 0}} 
+0

고맙습니다. 두 번째 발췌 문장은 잘 작동합니다! –

+0

@ J.Dillinger 환영합니다. 가장 도움이되는 대답을 [수락] (https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)하는 것을 잊지 마십시오. :) – MSeifert