例えば:
list = [{'a':1122,'b':'qqqq'},{'a':1244,'b':'qqqq'},{'a':1233,'b':'wwww'}]
2つの辞書がキーbに同じ値を含む繰り返し値を連結したい
私はそれらをこれらのようにしたい:
list = [{'a':2366,'b':'qqqq'},{'a':1233,'b':'wwww'}]
例えば:
list = [{'a':1122,'b':'qqqq'},{'a':1244,'b':'qqqq'},{'a':1233,'b':'wwww'}]
2つの辞書がキーbに同じ値を含む繰り返し値を連結したい
私はそれらをこれらのようにしたい:
list = [{'a':2366,'b':'qqqq'},{'a':1233,'b':'wwww'}]
キーは常に と になると思いa
ますb
。
の値をキーとして中間 (デフォルト) 辞書を作成し、 の値をb
合計しますa
。その後、データをリストに戻します。
import collections
data = [{'a':1122,'b':'qqqq'},{'a':1244,'b':'qqqq'},{'a':1233,'b':'wwww'}]
adder = collections.defaultdict(int)
for item in data:
adder[item['b']] += item['a']
data = [{'a':value, 'b':key} for key, value in adder.iteritems()]
print(data)
「qqqq」と「wwww」をどのように合計しますか?
たぶん、このコード スニペットはあなたが望むことをするでしょう:
d = [{'a':1122,'b':'qqqq'},{'a':1244,'b':'qqqq'},{'a':1233,'b':'wwww'}]
res = []
for item in d:
for key, value in item.iteritems():
if key not in res:
res[key] = []
res[key].append(value)
print res
>>> {'a': [1122, 1244, 1233], 'b': ['qqqq', 'qqqq', 'wwww']}
これは私が思いつくことができる最も一般的な解決策です:
from collections import Counter,defaultdict
def sum_list_dict(lst,spec):
d = defaultdict(list)
#accumulate dictionaries with same "special value"
for dd in lst:
d[ dd[spec] ].append(dd)
out = []
for v in d.values():
#Add all keys together. Previous version excluded the special key,
#but that really isn't necessary as we overwrite it next anyway
new_dict = sum((Counter(x) for x in v),Counter())
new_dict[spec] = v[0][spec]
out.append(dict(new_dict))
return out
lst = [{'a':1122,'b':'qqqq'},{'a':1244,'b':'qqqq'},{'a':1233,'b':'wwww'}]
print (sum_list_dict(lst,'b'))
私が知る限り、この答えは次のこと以外は仮定していません。
spec
鍵があります。collections.Counter
適切なクラス (python2.7+)にアクセスできる