2017-09-18 11 views
1

基本的には、この操作を効率的に実行するよう要求しましたが、私が使用しているデータ構造はありません。キーが存在する場合、ネストされた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ように取得する:あなたがネストされた辞書の理解を使用し、この中で(値またはデフォルト値を減算するdict.getを使用することができ

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

例を実際のPython辞書に置き換えてください。 BTW、ヒント:x - 0 == x。あなたは常にdictの中の値をチェックして、デフォルトの 's_dict.get( 'a'、0)'を与えることができます。 – pazqo

答えて

0

ケース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

ありがとう、2番目のスニペットはうまくいきます! –

+0

@ J.Dillingerよろしくお願いします。最も有益な回答を[承諾する]ことを忘れないでください(https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 :) – MSeifert

関連する問題