从两个列表创建字典

2 投票
5 回答
2144 浏览
提问于 2025-04-15 16:21

我想用两个列表来创建一个字典,一个列表作为键,另一个列表作为值,但我遇到了一些问题。到目前为止,我有这样的内容:

d={}
for num in range(10):
    for nbr in range(len(key)):
        d[num]=key[nbr]

假设我的键是一个从1到9的列表,而值的列表是 [2,4,0,9,6,6,8,6,4,5]

我该怎么做才能把它变成像 {0:2, 1:4, 依此类推...} 这样的格式呢?

5 个回答

2
values = [2,4,0,9,6,6,8,6,4,5]
d = dict(zip(range(10), values))

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

6

如果你想要特别处理索引,建议使用 enumerate 这个内置函数,而不是用 zip 或 range。

dict(enumerate([2,4,0,9,6,6,8,6,4,5]))
12

zip() 来帮忙了!

>>> k = range(1,10)   # or some list or iterable of sorts
>>> v = [2,4,0,9,6,6,8,6,4,5]
>>> d = dict(zip(k,v))
>>> d
{1: 2, 2: 4, 3: 0, 4: 9, 5: 6, 6: 6, 7: 8, 8: 6, 9: 4}
>>>

想了解更多细节,可以查看 zip() 内置函数,这是 Python 的官方文档。

关于 range() 和 "keys" 列表的说明。
问题提到“key 是从 1 到 9 的列表”(也就是说有 9 个不同的键),但值的列表显示有 10 个不同的值。这给我们提供了讨论两个“细节”的机会:

  • 上面代码中的 range() 函数会生成从 1 到 9 的范围,这是因为起始值(这里是 1)如果提供的话,总是会包含在内,而结束值(这里是 10)则永远不会包含。
  • zip() 函数会在最短的可迭代对象的最后一个项目迭代后停止(在我们的例子中,就是省略了列表中的最后一个值 '5')。

撰写回答