我解决下面问题的代码成功了,但谁能帮我理解一下:为什么我的代码只访问了键而没有访问值?这是我理解字典的一个一贯问题--本周才开始学习字典。我预计要么得到一个错误,要么得到一些乱七八糟的国家和数字。
你或许可以解释一下我是如何写出代码,将密钥单独添加到一个新的列表中的?
创建一个字典金币中的国家列表,并将该列表分配给变量名国家。不要硬写代码。
golds = {"Italy": 12, "USA": 33, "Brazil": 15, "China": 27, "Spain": 19, "Canada": 22, "Argentina": 8, "England": 29}
countries = []
accum = 0
for item in golds:
countries.append(item)
对于键的循环,你是这样做的。
for k in golds.keys():
对于值:
for v in golds.values():
两者都要循环
for k, v in golds.items():
Python的创造者们不得不选择以上的一种方式作为默认的体验,当他们在做的时候 for item in golds
. 他们决定选择第一种。
但为什么呢?
正如Sven和Amitai所指出的那样,将在键上迭代作为默认行为与能够做 key in my_dict
. 我越想越觉得。value in my_dict
本来就是个坏主意。
另外,我认为Python希望与当时许多其他语言的处理方式保持一致,所以这就带来了一个问题,哪种主要语言是第一个在字典上循环的语言?我试着做了一些研究来弄明白这个问题,但是我找不到哪种语言是第一个做出这个选择的 :(
在对字典进行迭代时,你会在 钥匙 仅限。你的一段代码。
for item in golds:
countries.append(item)
就是这样做的
一个更简单的方法是简单的。
countries = list(golds)
因为... list
构造函数在一个序列上迭代,而在 dict
,也就是说它的键。虽然上面的方法可行,但有点晦涩难懂。一个更好的选择是。
countries = list(golds.keys())
这个... keys
方法返回一个所有字典键的序列 (在 Python 3 中是迭代器,在 Python 2 中只是一个列表)。这比之前的方法更好 (IMHO),因为它清楚地说明了代码的意图,使其更易读。
欢迎来到 Python 中奇妙的字典世界 :) 事情一开始可能会有点混乱,但不要担心,没关系。
关于你的问题:当你在一个字典上迭代时,它只返回当前项的键(这就是为什么你的代码工作的原因)。如果你想访问其他数据,有几个方法可以帮助你。
dict.values()
或者 dict.keys()
:这些方法将从dict中返回一个值或键的列表,就像这样。
golds = {"Italy": 12, "USA": 33, "Brazil": 15, "China": 27, "Spain": 19, "Canada": 22, "Argentina": 8, "England": 29}
countries = []
accum = 0
# Using .keys() (default behavior)
for item in golds.keys():
countries.append(item)
# countries -> ["Italy", "USA", "Brazil", "China", "Spain", "Canada", "Argentina", "England"]
# Using .values()
for item in golds.values():
countries.append(item)
# countries -> [12, 33, 15, 27, 19, 22, 8, 29]
dict.items()
:这个方法将返回一个包含当前项的键和值的元组列表,在大多数情况下都非常有用。要使用它,你必须使用你的 for
以不同的方式。
# DISCLAIMER: key and value are just variable names, you can name them however you want
for key, value in golds.items():
# key -> 'Italy'
# value -> 12
...
希望能帮到你!