我编写了简单的几行代码来汇总python字典的元素,使其成为独一无二的。
test = [{'id': 3L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test', 'sum': 5},
{'id': 3L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test', 'sum': 1},
{'id': 3L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test', 'sum': 3},
{'id': 4L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test2', 'sum': 1},
{'id': 4L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test2', 'sum': 1},
{'id': 5L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test4', 'sum': 1},
{'id': 6L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test5', 'sum': 1}]
newlist = []
newdict = {}
for dict_item in test:
pixel = dict_item['id']
country = dict_item['category']
ac = dict_item['information']
name = dict_item['name']
sum = dict_item['sum']
if newdict.has_key(pixel):
pos = newdict[pixel]
newlist[pos] = {'id': pixel, 'category': country, 'information': ac, 'name': name, 'sum': (newlist[pos]['sum']+sum)}
else:
newlist.append(dict_item)
newdict[pixel] = len(newlist) -1
print newlist
我的总和结果:
[{'category': 'BOOK', 'information': 'abcdefghijk', 'sum': 9, 'id': 3L, 'name': 'test'},{'category': 'BOOK', 'information': 'abcdefghijk', 'sum': 2, 'id': 4L, 'name': 'test2'},{'category': 'BOOK', 'information': 'abcdefghijk', 'sum': 2, 'id': 5L, 'name': 'test5'}]
有没有更好的方法来总结这个字典来总结id是唯一的?
答案 0 :(得分:0)
无需使用其所有键和值重新创建整个字典。只需使用dict
创建原始字典的副本或添加到列表中现有字典的总和。另外,您可以从newlist
newdict
newdict = {} # or collections.OrderedDict() if order is important
for dict_item in test:
pixel = dict_item['id']
if pixel in newdict:
newdict[pixel]["sum"] += dict_item['sum']
else:
newdict[pixel] = dict(dict_item)
newlist = list(newdict.values())
答案 1 :(得分:0)
我会这样做。基本上,结合所有具有相同id的dicts。我还坚持使用dict而不是列表,以便您可以轻松地从键到值中选择映射。
squashed = {}
for inner in test:
key = inner['id']
del inner['id']
if key in squashed:
squashed[key]['sum'] += inner['sum']
else:
squashed[key] = inner
答案 2 :(得分:0)
test = [{'id': 3937L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test', 'sum': 5},
{'id': 3937L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test', 'sum': 1},
{'id': 3937L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test', 'sum': 3},
{'id': 4215L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test2', 'sum': 1},
{'id': 4215L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test2', 'sum': 1},
{'id': 4217L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test4', 'sum': 1},
{'id': 4218L, 'category': 'BOOK', 'information': 'abcdefghijk', 'name': 'test5', 'sum': 1}]
dct = {}
for d in test:
if d["id"] in dct:
dct[d["id"]]["sum"] += d["sum"]
else:
dct[d["id"]] = d.copy()
from pprint import pprint as pp
pp(dct.values())
输出匹配运行您自己的代码:
[{'category': 'BOOK',
'id': 4217L,
'information': 'abcdefghijk',
'name': 'test4',
'sum': 1},
{'category': 'BOOK',
'id': 3937L,
'information': 'abcdefghijk',
'name': 'test',
'sum': 9},
{'category': 'BOOK',
'id': 4218L,
'information': 'abcdefghijk',
'name': 'test5',
'sum': 1},
{'category': 'BOOK',
'id': 4215L,
'information': 'abcdefghijk',
'name': 'test2',
'sum': 2}]
您只需拨打dict.copy()
即可创建新的词组,每次都不需要手动创建新的词典。