d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print(key, 'corresponds to', d[key])
Python如何认识到它只需要从字典中读取密钥?key是一个特殊的关键字,还是仅仅是一个变量?
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print(key, 'corresponds to', d[key])
Python如何认识到它只需要从字典中读取密钥?key是一个特殊的关键字,还是仅仅是一个变量?
当前回答
关键不是一个特殊的词,而是字典实现了迭代器协议。你可以在你的类中这样做,例如,关于如何构建类迭代器,请参阅这个问题。
对于字典,它是在C级实现的。详细信息见PEP 234。特别是标题为“字典迭代器”的部分:
字典实现了一个tp_iter槽,该槽返回一个有效的迭代字典键的迭代器。[…]这个意味着我们可以写对于dict中的k:。。。这相当于,但比对于dict.keys()中的k:。。。只要对词典修改的限制(由循环或由另一个线程)不会被违反。向返回不同类型的迭代器显式:对于dict.iterkeys()中的键:。。。对于dict.itervalues()中的值:。。。对于键,dict.iteritems()中的值:。。。这意味着,for x in dict是x in的简写dict.iterkeys()。
在Python 3中,不再支持dict.iterkeys()、dict.itervalues()和dict.iteritems()。请改用dict.keys()、dict.values()和dict.items()。
其他回答
要迭代键,使用my_dict.keys()会更慢,但效果更好。如果您尝试这样做:
for key in my_dict:
my_dict[key+"-1"] = my_dict[key]-1
它会创建一个运行时错误,因为在程序运行时您正在更改密钥。如果您绝对希望减少时间,请以my_dict方式使用for键,但您已收到警告。
让我们开门见山。如果单词key只是一个变量,正如您所提到的,那么需要注意的是,当您在字典上运行“FOR LOOP”时,它只运行“key”,而忽略“value”。
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print (key, 'corresponds to', d[key])
不妨尝试一下:
d = {'x': 1, 'y': 2, 'z': 3}
for i in d:
print (i, 'corresponds to', d[i])
但如果使用以下函数:
d = {'x': 1, 'y': 2, 'z': 3}
print(d.keys())
在上面的例子中,keys不是一个变量,而是一个函数。
对于通过字典进行迭代,可以使用以下代码。
dictionary= {1:"a", 2:"b", 3:"c"}
#To iterate over the keys
for key in dictionary.keys():
print(key)
#To Iterate over the values
for value in dictionary.values():
print(value)
#To Iterate both the keys and values
for key, value in dictionary.items():
print(key,'\t', value)
我有一个用例,我必须遍历dict以获得键、值对以及指示我所在位置的索引。我是这样做的:
d = {'x': 1, 'y': 2, 'z': 3}
for i, (key, value) in enumerate(d.items()):
print(i, key, value)
请注意,键、值周围的括号很重要,如果没有它们,您将得到ValueError“没有足够的值来解包”。
如果您正在寻找清晰直观的示例:
cat = {'name': 'Snowy', 'color': 'White' ,'age': 14}
for key , value in cat.items():
print(key, ': ', value)
结果:
name: Snowy
color: White
age: 14