我在python中创建了两个列表,如下所示:
list1 = [2, 3, 3, 4, 4, 5]
list2 = [-4, 8, -4, 8, -1, 2]
现在我将这两个列表压缩成如下字典:
d = dict(zip(list1, list2))
给了我:
{2: -4, 3: -4, 4: -1, 5: 2}
我想要的是这样的结果:
{2: -4, 3: 4, 4: 7, 5: 2}
list1正在成为新词典的关键。如果我在list1中有两个相同的值,我希望它添加这两个值。例如,在list2中,8和-4都具有相同的键3.有没有办法将这两个值一起添加,所以键看起来像
{3: 4}
答案 0 :(得分:10)
我想你想要这样的东西:
>>> list1 = [2, 3, 3, 4, 4, 5]
>>> list2 = [-4, 8, -4, 8, -1, 2]
>>> d = {}
>>> for k, v in zip(list1, list2):
d[k] = d.get(k, 0) + v
>>> d
{2: -4, 3: 4, 4: 7, 5: 2}
答案 1 :(得分:7)
尝试使用defaultdict
:
from collections import defaultdict
d = defaultdict(int)
for k, v in zip(list1, list2):
d[k] += v
结果:
defaultdict(<type 'int'>, {2: -4, 3: 4, 4: 7, 5: 2})
查看在线工作:ideone
答案 2 :(得分:0)
请记住,当您进行排序时,会产生很大的成本(O(nlogn))。也很可能使用O(n)临时空间(内存)。 dict旨在最好地完成一项工作 - 即快速查找/添加/删除 - 不按排序顺序遍历所有项目(按未排序顺序行走仍然可以)。对于少量商品,这不是问题。通过了解其优势和局限性来确定正确的数据结构是很好的。还有其他数据结构,如树木,可以提供有序的步行而不需要很高的成本(他们可以在O(n)中完成)。
答案 3 :(得分:0)
您可以尝试使用字典理解将两个列表组合成字典。
list1 = [2, 3, 3, 4, 4, 5]
list2 = [-4, 8, -4, 8, -1, 2]
{k:v for k,v in zip(list1,list2)}
输出:
{2: -4, 3: -4, 4: -1, 5: 2}