对字典中值的操作

时间:2017-05-29 15:38:15

标签: python list dictionary

我有两个非唯一列表,我想将它们压缩到一个字典中,其中所有非唯一键的值都是一个总和。我想知道怎么做?

keys = ['a', 'b', 'c', 'c']
values = [1, 2, 3, 1]

输出:

{'a': 1, 'b': 2, 'c': 4}

5 个答案:

答案 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);