理解访问字典中的键和值 Python

问题描述 投票:0回答:2

我解决下面问题的代码成功了,但谁能帮我理解一下:为什么我的代码只访问了键而没有访问值?这是我理解字典的一个一贯问题--本周才开始学习字典。我预计要么得到一个错误,要么得到一些乱七八糟的国家和数字。

你或许可以解释一下我是如何写出代码,将密钥单独添加到一个新的列表中的?

创建一个字典金币中的国家列表,并将该列表分配给变量名国家。不要硬写代码。

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)
python list dictionary key
2个回答
1
投票

对于键的循环,你是这样做的。

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希望与当时许多其他语言的处理方式保持一致,所以这就带来了一个问题,哪种主要语言是第一个在字典上循环的语言?我试着做了一些研究来弄明白这个问题,但是我找不到哪种语言是第一个做出这个选择的 :(


1
投票

在对字典进行迭代时,你会在 钥匙 仅限。你的一段代码。

for item in golds:
    countries.append(item)

就是这样做的

一个更简单的方法是简单的。

countries = list(golds)

因为... list 构造函数在一个序列上迭代,而在 dict,也就是说它的键。虽然上面的方法可行,但有点晦涩难懂。一个更好的选择是。

countries = list(golds.keys())

这个... keys 方法返回一个所有字典键的序列 (在 Python 3 中是迭代器,在 Python 2 中只是一个列表)。这比之前的方法更好 (IMHO),因为它清楚地说明了代码的意图,使其更易读。


1
投票

欢迎来到 Python 中奇妙的字典世界 :) 事情一开始可能会有点混乱,但不要担心,没关系。

关于你的问题:当你在一个字典上迭代时,它只返回当前项的键(这就是为什么你的代码工作的原因)。如果你想访问其他数据,有几个方法可以帮助你。

  1. 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]
  1. 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
    ...

希望能帮到你!

© www.soinside.com 2019 - 2024. All rights reserved.