d = {'x': 1, 'y': 2, 'z': 3}

for key in d:
    print(key, 'corresponds to', d[key])

Python如何认识到它只需要从字典中读取密钥?key是一个特殊的关键字,还是仅仅是一个变量?


当前回答

Python中的字典是键值对的集合。每个键都连接到一个值,您可以使用键访问与该键关联的值。键的值可以是数字、字符串、列表,甚至是另一个字典。在这种情况下,将每个“键值对”威胁为表中的单独一行:d是具有两列的表。键是第一列,键[value]是第二列。for循环是遍历表的标准方法。

其他回答

这是一个非常常见的循环习惯用法。in是运算符。有关何时在dict中使用key以及何时必须在dict.keys()中使用key的信息,请参阅David Goodger的惯用Python文章(存档副本)。

Python中的字典是键值对的集合。每个键都连接到一个值,您可以使用键访问与该键关联的值。键的值可以是数字、字符串、列表,甚至是另一个字典。在这种情况下,将每个“键值对”威胁为表中的单独一行:d是具有两列的表。键是第一列,键[value]是第二列。for循环是遍历表的标准方法。

我有一个用例,我必须遍历dict以获得键、值对以及指示我所在位置的索引。我是这样做的:

d = {'x': 1, 'y': 2, 'z': 3} 
for i, (key, value) in enumerate(d.items()):
   print(i, key, value)

请注意,键、值周围的括号很重要,如果没有它们,您将得到ValueError“没有足够的值来解包”。

这将按升序值按排序顺序打印输出。

d = {'x': 3, 'y': 1, 'z': 2}

def by_value(item):
    return item[1]

for key, value in sorted(d.items(), key=by_value):
    print(key, '->', value)

输出:

y->1z->2x->3

要迭代键,使用my_dict.keys()会更慢,但效果更好。如果您尝试这样做:

for key in my_dict:
    my_dict[key+"-1"] = my_dict[key]-1

它会创建一个运行时错误,因为在程序运行时您正在更改密钥。如果您绝对希望减少时间,请以my_dict方式使用for键,但您已收到警告。