将两个列表放入字典中

时间:2011-11-26 21:26:24

标签: python dictionary zip

我在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}   

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}