从具有重复值的字典中,如何创建一个不包括重复的新词,并增加字典中的couter? [英] From a dictionary with repeated values, how to create a new one excluding the repeats and incrementing a couter inside the dictionary?
本文介绍了从具有重复值的字典中,如何创建一个不包括重复的新词,并增加字典中的couter?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
转到:
a = {'1':{'name':'Blue','qty' '1'},
'2':{'name':'Green','qty':'1'},
'3':{'name':'Blue','qty ':'1'},
'4':{'name':'Blue','qty':'1'}}
到这个:
b = {'1':{'name' :'Blue','qty':'3'},
'2':{'name':'Green','qty':'1'}}
我能够排除重复的值,但不能增加数量字段。
对于k,v在a.iteritems()中的
$ b如果v不在b.values()中,则$ $ $ $ $ $ $
b [k] = v
解决方案
工作:
从集合导入defaultdict
result = defaultdict(lambda:0)
#总结每个名称的
的数量m in a.values():
result [item ['name']] + = int(item ['qty'])
#转换为你的搞笑格式
b = {str(i + 1):v for i,v in enumerate({'name':key,'qty':str(val)} for key,val in result.items())}
#b包含:
#{'1':{'name':'Blue','qty':'3'},'2':{'name':'Green','qty ':'1'}}
如果我可以选择数据结构,它可能如下所示: / p>
从运算符导入添加
/ pre>
从集合导入计数器
a = [('蓝色' 1),('Green',1),('Blue',1),('Blue',1)]
b = reduce(add,[Counter(** {x [0]:x [ ]})for x in a])
#b包含:
#Counter({'Blue':3,'Green':1})
Turn this:
a = {'1': {'name': 'Blue', 'qty': '1'}, '2': {'name': 'Green', 'qty': '1'}, '3': {'name': 'Blue', 'qty': '1'}, '4': {'name': 'Blue', 'qty': '1'}}
into this:
b = {'1': {'name': 'Blue', 'qty': '3'}, '2': {'name': 'Green', 'qty': '1'}}
I was able to exclude the repeated values but could't increment the 'qty' field.
b = {} for k,v in a.iteritems(): if v not in b.values(): b[k] = v
解决方案This seems to work:
from collections import defaultdict result = defaultdict(lambda: 0) # Summarize quantities for each name for item in a.values(): result[item['name']] += int(item['qty']) # Convert to your funny format b = {str(i+1): v for i, v in enumerate({'name': key, 'qty': str(val)} for key, val in result.items())} # b contains: # {'1': {'name': 'Blue', 'qty': '3'}, '2': {'name': 'Green', 'qty': '1'}}
If I could choose data structures, it might look like this:
from operator import add from collections import Counter a = [('Blue', 1), ('Green', 1), ('Blue', 1), ('Blue', 1)] b = reduce(add, [Counter(**{x[0]: x[1]}) for x in a]) # b contains: # Counter({'Blue': 3, 'Green': 1})
这篇关于从具有重复值的字典中,如何创建一个不包括重复的新词,并增加字典中的couter?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文