创建一个字典,每个键对应多个值

4

如何从两个列表中创建一个每个键有多个值的字典?

例如,我有以下内容:

>>> list1 = ['fruit', 'fruit', 'vegetable']

>>> list2 = ['apple', 'banana', 'carrot']

而且,我希望你能翻译出以下内容:
>>> dictionary = {'fruit': ['apple', 'banana'], 'vegetable': ['carrot']}

我迄今为止尝试了以下方法:

>>> keys = list1
>>> values = list2
>>> dictionary = dict(zip(keys, values))
>>> dictionary
    {'fruit': 'banana', 'vegetable': 'carrot'}
3个回答

9
您可以使用dict.setdefault和简单的for循环:
>>> list1 = ["fruit", "fruit", "vegetable"]
>>> list2 = ["apple", "banana", "carrot"]
>>> dct = {}
>>> for i, j in zip(list1, list2):
...     dct.setdefault(i, []).append(j)
... 
>>> dct
{'fruit': ['apple', 'banana'], 'vegetable': ['carrot']}

根据文档:

setdefault(key[, default])

如果字典中存在key,则返回其对应的值。否则,将key插入字典,并返回默认值default。如果没有指定default,则默认为None


6
您可以使用 collections.defaultdict 来完成这样的任务:
>>> from collections import defaultdict
>>> d=defaultdict(list)
>>> for i,j in zip(list1,list2):
...    d[i].append(j)
... 
>>> d
defaultdict(<type 'list'>, {'vegetable': ['carrot'], 'fruit': ['apple', 'banana']})

5

这与其他答案略有不同。对于初学者来说,它更加简单。

list1 = ['fruit', 'fruit', 'vegetable']
list2 = ['apple', 'banana', 'carrot']
dictionary = {}

for i in list1:
    dictionary[i] = []

for i in range(0,len(list1)):
    dictionary[list1[i]].append(list2[i])

它将返回

{'vegetable': ['carrot'], 'fruit': ['apple', 'banana']}

这段代码遍历list1,并将其中的每个项作为一个空列表在dictionary中创建一个键。然后它从0到2依次处理每个项目,并将list2中的每个项目添加到其相应的类别中,以使每个匹配项中的索引0对应、每个匹配项中的索引1对应、每个匹配项中的索引2对应。

谢谢,这个解释真的很有帮助! - Susie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接