我有两个非唯一列表,我想将它们压缩到一个字典中,其中所有非唯一键的值都是一个总和。我想知道怎么做?
keys = ['a', 'b', 'c', 'c']
values = [1, 2, 3, 1]
输出:
{'a': 1, 'b': 2, 'c': 4}
答案 0 :(得分:4)
您可以使用defaultdict
:
from collections import defaultdict
keys = ['a', 'b', 'c', 'c']
values = [1, 2, 3, 1]
dct = defaultdict(int) # create the defaultdict - with 0 as default
for k, v in zip(keys, values):
dct[k] += v
print(dict(dct)) # {'a': 1, 'b': 2, 'c': 4}
如果您想使用普通字典,可以使用dict.get
,默认为零:
dct = {}
for k, v in zip(keys, values):
dct[k] = dct.get(k, 0) + v
print(dct) # {'a': 1, 'b': 2, 'c': 4}
答案 1 :(得分:1)
你可以这样做
outputDict = {}
keys = ['a', 'b', 'c', 'c']
values = [1, 2, 3, 1]
for index, value in enumerate(keys):
if value in outputDict:
outputDict[value] += values[index]
else:
outputDict[value] = values[index]
print(outputDict)
#The output is {'a': 1, 'c': 4, 'b': 2}
注意:字典未排序,因此不必按顺序a,b,c
。
答案 2 :(得分:1)
只需循环遍历每个键,看它是否已经在字典中,如果是这样,将两个值加在一起:
keys = ['a', 'b', 'c', 'c']
values = [1, 2, 3, 1]
new_dict = {}
for k, v in zip(keys, values):
if k in new_dict:
new_dict.update({k: new_dict[k] + v})
else:
new_dict.update({k: v})
print (new_dict)
看到它是一本字典,输出将是随机顺序。
答案 3 :(得分:0)
使用常规字典:
d = {}
for k, v in zip(keys, values):
d.setdefault(k, 0)
d[k] += v
或默认字典:
from collections import defaultdict
d = defaultdict(int)
for k, v in zip(keys, values):
d[k] += v
答案 4 :(得分:0)
您可以使用没有defaultdict的常规字典来尝试:
your_categories_spinner.setAdapter(categories_adapter);