Python 将两个列表编入词典

Python 将两个列表编入词典,python,dictionary,zip,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 = [2, 3, 3, 4, 4, 5] >&g

我用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 = [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正在成为新词典的关键。如果列表1中有两个相同的值,我希望它将这两个值相加。例如,在列表2中,8和-4都具有相同的键3。有没有办法将这两个值相加,使键看起来像

{3: 4}   
请尝试使用:

结果:

defaultdict(<type 'int'>, {2: -4, 3: 4, 4: 7, 5: 2}) defaultdict(,{2:-4,3:4,4:7,5:2})
在线查看:我想你想要这样的东西:

{2: -4, 3: 4, 4: 7, 5: 2}
>>> 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}

请记住,在进行排序时,会产生很大的成本(O(nlogn))。也很可能存在O(n)临时空间(内存)使用。dict的设计目的是最好地完成一项工作,即快速查找/添加/删除,而不是按排序的顺序遍历所有项目(按未排序的顺序遍历仍然可以)。对于少数项目,这不是一个问题。通过了解数据结构的优点和局限性来确定正确的数据结构是很好的。还有其他数据结构,如树,可以提供有序行走而无需花费很大的成本(它们可以在O(n)中完成)。

您可以尝试字典理解,将两个列表合并到一个字典中

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}

这是一个很好的答案,但我认为初学者在引入collections.defaultdict之前需要先接触dict.get()。前者为核心数据类型奠定了坚实的基础。后者需要了解工厂函数,知道不带参数的int()返回零,并且生成的defaultdict显示方式与常规dict不同。+1我更喜欢defaultdict,因为它表达了意图,但您强调了一点,即它更容易让初学者理解
get
。谢谢,这很有效。我甚至没想到要用get。另一个问题,我知道字典是无序的,但是可以从最高键到最低键显示字典吗?@user1067296查看有序结果的最简单方法是
打印排序(d.items(),reverse=True)