2016-06-28 5 views
1

に一致する場合は、1つに、辞書の値をマージ:私のセットアップでキーは私のような満たされていると言う、と呼ばれる辞書、<code>tempDict</code>持っ条件

tempDict = {'a': 100, 'b': 200, 'c': 120, 'b_ext1': 4, 'd': 1021, 'a_ext1': 21, 'f_ext1': 12} 

を、私はキーの上に、任意のためならばループする必要がありますキーに '_ext1'という接尾辞が付いている場合は、変更されていないキー(好ましくは 'ext1'なし)を保持しながら値をマージして、新しい辞書を書き直したり作成したりします。

すなわち:、自身が整数ではありませんが、操作なし'f'接尾辞を持たない'_ext1'

と値が存在するよう

newDict = {'a': 121, 'b': 204, 'c': 120, 'd': 1021, 'f_ext1':12} 

通知は、辞書の最後のエントリは変更されませんする必要があります似ています。

誰にもアイデアはありますか?

+0

ですか::100と 'a_ext1':121 – Deca

+0

'' 取得didntは21 を「私は与えることの両方をマージしたい"a"のようなキー、"f"ソートa_ext1"」の前に、"f_ext1"は、これは動作しますa ':121 – domsmiff

+1

を合併して平均加算(+)しますか? – Deca

答えて

1
newDict = {} 
for k in tempDict: 
    if k.endswith("_ext1") and k[:-5] in tempDict: 
     newDict[k[:-5]] = newDict.get(k[:-5],0)+tempDict[k] 
    else: 
     newDict[k] = newDict.get(k,0)+tempDict[k] 
1

ソートされた順序でキー(項目)を繰り返し、値を合計または加算します。

>>> d = {} 
>>> for k, v in sorted(tempDict.items()): 
...  if k[0] in d: 
...   d[k[0]] += v 
...  else: 
...   d[k] = v 
... 
>>> d 
{'a': 121, 'c': 120, 'b': 204, 'd': 1021, 'f_ext1': 12} 
関連する問題