簡體   English   中英

了解訪問字典中的鍵和值 Python

[英]Understanding accessing the key and value in dictionaries Python

我解決以下問題的代碼有效,但有人可以幫助我理解這一點:為什么我的代碼只訪問鍵而不是值? 這一直是我理解字典的一個一貫問題——這周剛開始學習它們。 我預計要么會出錯,要么會出現一些混亂的國家和數字。

您能否解釋一下我將如何編寫代碼以將密鑰單獨添加到新列表中?

創建字典 golds 中的國家列表,並將該列表分配給變量名國家。 不要對此進行硬編碼。

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 中的列表)。 這比以前的方法更好(恕我直言),因為它清楚地說明了代碼的意圖,使其更具可讀性。

歡迎來到 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
    ...

希望有幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM