使用两个for循环在Python中填充字典

101

我正在尝试使用两个for循环创建一个字典。这是我的代码:

dicts = {}
keys = range(4)
values = ["Hi", "I", "am", "John"]
for i in keys:
    for x in values:
        dicts[i] = x
print(dicts)

这将输出:

{0: 'John', 1: 'John', 2: 'John', 3: 'John'}

为什么?
我原本计划让它输出:
{0: 'Hi', 1: 'I', 2: 'am', 3: 'John'}

为什么它不能按预期输出,我们该如何让它正确输出呢?

2
在第二个for循环中添加一个打印语句。 - Ajay
我尝试过,但输出仍然是相同的。 - Halcyon Abraham Ramirez
1
检查我给出的答案 - Ajay
2个回答

151
dicts = {}
keys = range(4)
values = ["Hi", "I", "am", "John"]
for i in keys:
    dicts[i] = values[i]
print(dicts)

或者
In [7]: dict(list(enumerate(values)))
Out[7]: {0: 'Hi', 1: 'I', 2: 'am', 3: 'John'}

3
谢谢你的回答。这很有趣。因为enumerate也会输出数字,对吧?很酷。 - Halcyon Abraham Ramirez
我想知道,既然你的答案得到了更多的投票,是否有人更喜欢你的备选答案而不是下面的dict(zip())答案?在运行时间上是否有任何真正的差异,或者由于zip是enumerate的一种特殊类型,这只是取决于我们想要dict.keys是整数还是字符串? - pmackni

91
>>> dict(zip(keys, values))
{0: 'Hi', 1: 'I', 2: 'am', 3: 'John'}

17
这看起来非常简单,以至于我为自己之前用到的for循环感到惭愧。非常感谢你。 - Halcyon Abraham Ramirez
2
它假设键和值由相同的索引正确关联... 我想for循环也是这样假设的,但它更加灵活。 - 3pitt
1
@MikePalmice:只要在字典不被修改的情况下,Python文档保证这是正确的。 - Ignacio Vazquez-Abrams
非常完美,对我的项目有很大帮助。非常感谢您,先生。 - Marek Ševela

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