gpt4 book ai didi

python - 字典迭代——对于 dict 与 dict.items()

转载 作者:太空狗 更新时间:2023-10-29 16:53:31 29 4
gpt4 key购买 nike

当我们遍历下面的字典时,每次迭代(正确地)返回一个键值对

for key, value in dict.items():
print "%s key has the value %s" % (key, value)

'some key' key 的值为 'some value'(重复多次,但存在 k,v 对)

以上对我来说很有意义,但是如果我们这样做:

for key in dict.items():
print "%s key has the value %s" % (key, value)

("some key", "some value") 具有值 "some value"(左元组将遍历每个键值对和右值将只停留在字典中的第一个值并重复)

我们最终得到第一个 %s(键)和第二个 %s(值)返回的每个 k,v 对,不迭代,它只是返回for 循环每次迭代的字典中的第一个值。

我知道,如果您仅使用 for key in dict 进行迭代,那么您将仅对键进行迭代。在这里,由于我们在 for 循环中仅使用键来迭代一组元组(通过使用 dict.items()),因此循环应该运行与第一个示例相同的次数,因为键的数量与键值对一样多。

我难以理解的是,为什么 python 在第二个示例中为您提供了 key 的整个元组。


感谢大家的帮助——我想再添加一个问题。

for a,a in dict.items():
print a

为什么上面打印值,如果我 print a,a - 显然两个值都打印了两次。如果我输入了 for a,b,我会迭代 (key,value) 对,所以我逻辑上认为我现在正在迭代 (key,key) 对,因此会打印键而不是值。很抱歉这些基本问题只是在解释器中玩弄并试图弄清楚。

最佳答案

第一个示例是利用称为“元组拆包”的方法将与您的单独示例中真正相同的元组分解为两个不同的变量。

换句话说:

for key, value in dict.items():

就是这样:

for keyvalue in dict.items():
key, value = keyvalue[0], keyvalue[1]

请记住,for 循环始终迭代您提供的迭代器的各个元素。 dict.items() 返回一个类似列表的元组对象,因此每次运行 for 循环都是一个新的元组,自动解压为 key, value 如果您在 for 循环中这样定义它。

这样想可能会有所帮助:

d = {'a':1, 'b':2, 'c':3}
list(d) # ['a', 'b', 'c'] the keys
list(d.keys()) # ['a', 'b', 'c'] the keys
list(d.values()) # [1, 2, 3] the values
list(d.items()) # [('a',1), ('b',2), ('c',3)] a tuple of (key, value)

注意这是你的代码的唯一原因

for key in dict.items():
print "%s key has value: %s" % (key, value)

不抛出 NameError 是因为 value 已经在您的代码的其他地方定义了。由于您没有在 for 循环中的任何地方定义 value,否则它会抛出异常。

关于python - 字典迭代——对于 dict 与 dict.items(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24746712/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com