将两个列表放入字典中

me4*_*e45 4 python zip dictionary

我在python中创建了两个列表,如下所示:

list1 = [2, 3, 3, 4, 4, 5]
list2 = [-4, 8, -4, 8, -1, 2]
Run Code Online (Sandbox Code Playgroud)

现在我将这两个列表压缩成一个字典,如下所示:

d = dict(zip(list1, list2))
Run Code Online (Sandbox Code Playgroud)

这给了我:

{2: -4, 3: -4, 4: -1, 5: 2}
Run Code Online (Sandbox Code Playgroud)

我想得到的是这样的结果:

{2: -4, 3: 4, 4: 7, 5: 2}
Run Code Online (Sandbox Code Playgroud)

list1正在成为新词典的关键.如果我在list1中有两个相同的值,我希望它添加这两个值.例如,在list2中,8和-4都具有相同的键3.有没有办法将这两个值一起添加,所以键看起来像

{3: 4}   
Run Code Online (Sandbox Code Playgroud)

Ray*_*ger 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}
Run Code Online (Sandbox Code Playgroud)

  • @ user1067296查看有序结果的最简单方法是``print sorted(d.items(),reverse = True)``. (2认同)

Mar*_*ers 7

尝试使用defaultdict:

from collections import defaultdict

d = defaultdict(int)
for k, v in zip(list1, list2):
    d[k] += v
Run Code Online (Sandbox Code Playgroud)

结果:

defaultdict(<type 'int'>, {2: -4, 3: 4, 4: 7, 5: 2})

看到它在线工作:ideone

  • 这是一个很好的答案,但我认为初学者需要在被引入*collections.defaultdict*之前暴露给*dict.get()*.前者构建了核心数据类型的坚实基础.后者需要了解工厂函数,知道*int()*,没有参数返回零,并且生成的defaultdict显示与常规字典不同. (3认同)