我有这样的说法:
list_dicts = [
{
'code': 'A1', 'name': 'White',
},
{
'code': 'A2', 'name': 'Black',
},
{
'code': 'A1', 'name': 'White',
},
{
'code': 'A3', 'name': 'Red',
}
]
如何从上面的词汇中得到这样的词汇?
list_dicts = [
{
'code': 'A1', 'name': 'White', 'qty': 2
},
{
'code': 'A2', 'name': 'Black', 'qty': 1
},
{
'code': 'A3', 'name': 'Red', 'qty': 1
}
]
..........................
答案 0 :(得分:3)
假设您确实有一个dicts列表:
list_dict = [
{'code': 'A1', 'name': 'White'},
{'code': 'A2', 'name': 'Black'},
{'code': 'A1', 'name': 'White'},
{'code': 'A3', 'name': 'Red'}
]
然后您可以使用collections.Counter
来计算值:
In []:
from collections import Counter
Counter((x['code'], x['name']) for x in list_dict)
Out[]:
Counter({('A1', 'White'): 2, ('A2', 'Black'): 1, ('A3', 'Red'): 1})
将其重新转换为您正在寻找的词典列表是一项相当容易的练习。
答案 1 :(得分:0)
只需使用defaultdict
来存储每个(code, name)
的计数:
from collections import defaultdict
list_dict = [{'code': 'A1', 'name': 'White'},
{'code': 'A2', 'name': 'Black'},
{'code': 'A1', 'name': 'White'},
{'code': 'A3', 'name': 'Red'},
]
d = defaultdict(int)
for dic in list_dict:
key = dic['code'], dic['name']
d[key] += 1
>>> print(dict(d))
{('A1', 'White'): 2, ('A2', 'Black'): 1, ('A3', 'Red'): 1}
然后只需创建一个新列表,并从上面的字典中插入新数据:
new_dict_list = [{'code':code, 'name':name, 'qty':qty} for (name, code), qty in d.items()]
>>> print(new_dict_list)
[{'code': 'A1', 'name': 'White', 'qty': 2}, {'code': 'A2', 'name': 'Black', 'qty': 1}, {'code': 'A3', 'name': 'Red', 'qty': 1}]