zar*_*gar 5 python dictionary sum list
我有一个清单如下,
flat_list = ['hello,5', 'mellow,4', 'mellow,2', 'yellow,2', 'yellow,7', 'hello,7', 'mellow,7', 'hello,7']
Run Code Online (Sandbox Code Playgroud)
如果它们共享相同的单词,我想获得值的总和,所以输出应该是,
期望的输出:
l = [('hello',19), ('yellow', 9), ('mellow',13)]
Run Code Online (Sandbox Code Playgroud)
到目前为止,我已经尝试过以下操作,
new_list = [v.split(',') for v in flat_list]
d = {}
for key, value in new_list:
if key not in d.keys():
d[key] = [key]
d[key].append(value)
# getting rid of the first key in value lists
val = [val.pop(0) for k,val in d.items()]
# summing up the values
va = [sum([int(x) for x in va]) for ka,va in d.items()]
Run Code Online (Sandbox Code Playgroud)
但是由于某种原因,最后的总结不起作用,我没有得到我想要的输出
这是使用以下方法实现目标的变体defaultdict:
from collections import defaultdict
t = ['hello,5', 'mellow,4', 'mellow,2', 'yellow,2',
'yellow,7', 'hello,7', 'mellow,7', 'hello,7']
count = defaultdict(int)
for name_number in t:
name, number = name_number.split(",")
count[name] += int(number)
Run Code Online (Sandbox Code Playgroud)
您还可以使用Counter:
from collections import Counter
count = Counter()
for name_number in t:
name, number = name_number.split(",")
count[name] += int(number)
Run Code Online (Sandbox Code Playgroud)
list在这两种情况下,您都可以使用以下命令将输出转换为 a of tuples:
list(count.items())
# -> [('hello', 19), ('mellow', 13), ('yellow', 9)]
Run Code Online (Sandbox Code Playgroud)
我运行了您的代码,确实得到了正确的结果(尽管不是您想要的格式)。