【问题标题】:Understanding accessing the key and value in dictionaries Python了解访问字典 Python 中的键和值
【发布时间】:2020-05-12 15:58:09
【问题描述】:

我解决以下问题的代码有效,但有人可以帮助我理解这一点:为什么我的代码只访问键而不是值?这一直是我理解字典的一个一贯问题——这周刚开始学习它们。我预计要么会出错,要么会出现一些混乱的国家和数字。

您能否解释一下我将如何编写代码以将密钥单独添加到新列表中?

创建字典中的国家列表,并将该列表分配给变量名国家。不要硬编码。

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字典的API——迭代字典对象和迭代my_dict.keys()是一样的。这与检查key in my_dict 一致,检查key 是否存在于my_dict 中。
  • 这也意味着您可以通过 countries = list(golds) 获取用例中的国家/地区列表。

标签: python list dictionary key


【解决方案1】:

循环遍历你所做的键:

for k in golds.@987654321@:

对于值:

for v in golds.@987654322@:

对于两者:

for k, v in golds.@987654323@:

Python 创建者在执行for item in golds 时必须选择上述其中一项作为默认体验。他们决定选择第一个。


但是为什么呢?

正如 Sven 和 Amitai 所指出的,将其设为迭代键的默认行为与执行key in my_dict 的能力一致。我想得越多,value in my_dict 就不是一个好主意。

另外,我认为 Python 希望与当时许多其他语言处理这种情况的方式保持一致,因此提出了一个问题,哪个主要语言是第一个循环遍历字典的语言?我试图做一些研究来解决这个问题,但我找不到第一个做出这个选择的语言:(

【讨论】:

  • 迭代字典只给出键,而不是值。
  • 哎呀。谢谢斯文。我已经确定了答案。
  • @wp-overwatch.com - 可能是一个见仁见智的问题,但选择 keys 是显而易见的,因为它与 in 运算符对齐以进行成员资格测试。
  • 在 Rust 中,迭代 HashMap(相当于 Python 的 dict)会产生项目,而不是键。
【解决方案2】:

当迭代字典时,你将只迭代 keys。你的一段代码:

for item in golds:
    countries.append(item)

就是这么做的。

一个更简单的方法是:

countries = list(golds)

因为list 构造函数会遍历一个序列,而对于dict,这意味着它的键。虽然上述方法有效,但它有点晦涩难懂。更好的选择是:

countries = list(golds.keys())

keys 方法返回所有字典键的序列(Python 3 中的迭代器,Python 2 中的简单列表)。这比以前的方法更好(恕我直言),因为它清楚地说明了代码的意图,使其更具可读性。

【讨论】:

    【解决方案3】:

    欢迎来到神奇的 Python 字典世界 :) 一开始可能会有些混乱,但别担心,没关系。

    关于您的问题:当您遍历字典时,它仅返回当前项目的键(这就是您的代码有效的原因)。如果您想访问其他数据,有两种方法会有所帮助:

    1. dict.values()dict.keys():

    这些方法将返回字典中的值或键列表,如下所示:

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

    希望有帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2015-08-29
      • 2018-02-09
      • 2020-08-08
      相关资源
      最近更新 更多