【问题标题】:How to combine 2 lists into a dictionary, where keys can have multiple values?如何将 2 个列表组合成一个字典,其中键可以有多个值?
【发布时间】:2019-11-11 16:48:39
【问题描述】:

以下两个列表匹配,所以 Alice 的年龄是 20 岁,Bob 的年龄是 21 岁,以此类推。

names = ["Alice", "Bob", "Cathy", "Dan", "Ed", "Frank", "Gary", "Helen", "Irene", "Jack", "Kelly", "Larry"]
ages = [20, 21, 18, 18, 19, 20, 20, 19, 19, 19, 22, 19]

编写一个程序,将这些列表组合成一个字典。键是年龄,值是名字,所以键可以有多个值,并且 看起来像这样:

{20: ['Alice', 'Frank', 'Gary'], 
 21: ['Bob'], 
 18: ['Cathy', 'Dan'], 
 19: ['Ed', 'Helen', 'Irene', 'Jack', 'Larry'], 
 22: ['Kelly']}

我已经尝试了一些这样的事情:

newDict = dict(zip(年龄、姓名)) 打印(新字典)

他们都输出: {20:“加里”,21:“鲍勃”,18:“丹”,19:“拉里”,22:“凯利”}

【问题讨论】:

  • 请发布您尝试过的内容以及不足之处。
  • 您尝试过什么了吗?现在,听起来您要求我们为您做作业,这不是 Stack Overflow 的用途。

标签: python python-3.x


【解决方案1】:

试试这个:

from collections import defaultdict
age_name = defaultdict(list)

for age, name in zip(ages, names):
    age_name[age].append(name)

Defaultdicts 非常有用。它们会自动为新密钥创建默认容器。

编辑:不使用默认字典

age_name = dict()
for age, name in zip(ages, names):
    if age not in age_name.keys():
        age_name[age] = list()
    age_name[age].append(name)

【讨论】:

  • 我必须这样做而不导入任何东西:(
猜你喜欢
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-27
  • 2021-06-06
相关资源
最近更新 更多