簡體   English   中英

具有多個值的Python Dict鍵

[英]Python Dict Key with Multiple Values

我正在學習字典,我知道我可以通過再創建兩個字典來做到這一點,但是為了簡潔起見,我想使代碼更加簡潔,而不是必須再創建兩個字典(最終,所有內容我寫的這個字典必須寫在其他字典中,所以我想我比什么都好奇。 而且我知道我不應該使用for循環,但是我不知道另一種方式,就LPTH而言,我不得不從某個地方開始。

問題1:如何讓它遍歷每個州/縮寫/城市? 我是否只需要做多個字典或一系列列表並使用它們? 問題2:為什么此代碼會運行for循環11次?

states1 = {
    '1': 'Oregon', 'a': 'OR','population': '1000',
    '2': 'Florida', 'b': 'MI', 'population': '1000',
    '3': 'California', 'c': 'CA', 'population': '1000',
    '4': 'NewYork', 'd': 'NY', 'population': '1000',
    '5': 'Michigan','e': 'MI','population': '1000',
}

for city, pop, in states1.items():
    print "%s has the abbreviation %s and a population of %s" %states1['1'], states1['a'], states1['population'])

理想情況下,您將擁有一個統一的數據結構-例如dict 1 list 每個dict將保存有關特定狀態的信息:

states1 = [
  {'name': 'Oregon', 'abbrev': 'OR', 'population': 1000},
  {'name': 'Florida', 'abbrev': 'FL', 'population': 1000},
  ...,
]

現在,您的循環如下所示:

for state in states1:
    print print "%s has the abbreviation %s and a population of %s" % (state['name'], states['abbrev'], states['population'])

希望這里的好處是顯而易見的。 對於任何給定的州,您都可以以相同的方式檢索相關信息(始終可以通過'name'鍵訪問該州的名稱)。

如果您需要映射州名(例如,您想通過州名的縮寫查找一堆州的人口),則可以通過創建字典來輕松地做到這一點。

abbrev_to_state = {state['abbrev']: state for state in states1}
florida_data = abbrev_to_state['FL']
new_hampshire_data = abbrev_to_state['NH']
...

1這里也有其他選項...您可以使用自定義類,但是如果您不打算對數據進行突變,這似乎也是collections.namedtuple列表的不錯選擇。

您可以使每個值成為一個列表。

我不知道您到底想實現什么,但是簡單的方法是:

states1 = {
1: ["Oregon", "OR", 1000]
2: ["Florida", "FL", 1000]
3: ["Pythonville", "PY", 1000]
4: ["Dictville", "DI", 1000]
}

您可以查找的另一件事稱為tuple ,它是我想要快速組織數據時最喜歡的數據結構之一。

from collections import namedtuple

CityInfo = namedtuple("CityInfo", ["Name", "Abbr", "Pop"])

states1 = {
            1: CityInfo("Oregon", "OR", 1000),
            2: CityInfo("Florida", "FL", 1000),
            3: CityInfo("Pythonville", "PY", 1000),
            4: CityInfo("Dictville", "DI", 1000)
            }

for city in states1.values():
    print("{} has the abbreviation {} and a population of {}".format(city.Name, city.Abbr, city.Pop))

當我按照您的建議運行(如下)時,它吐出了

Michigan has the abbreviation MI and a population of 1000
Michigan has the abbreviation MI and a population of 1000
Michigan has the abbreviation MI and a population of 1000

不知道為什么它會持續這樣做,我會猜測是否由於某種原因選擇了一個完全隨機的狀態,因為這是一本字典,每次都會更改狀態,偶爾會重復。

states1 = {
    'state': 'Oregon', 'abbrev': 'OR','population': '10000',
    'state': 'Florida', 'abbrev': 'MI', 'population': '1000',
    'state': 'California', 'abbrev': 'CA', 'population': '1000',
    'state': 'NewYork', 'abbrev': 'NY', 'population': '1000',
    'state': 'Michigan','abbrev': 'MI','population': '1000',
}

for city, pop, in states1.items():
    print "%s has the abbreviation %s and has a population of %s" % (states1['state'], states1['abbrev'], states1['population'])

另一個示例,說明如何根據需要構造數據。

states1 = {
'Oregon': {'abrv': 'OR','population': '1000'},
'Florida':{ 'abrv': 'MI', 'population': '1000'},
'California':{'abrv': 'CA', 'population': '1000'},
'NewYork':{'abrv': 'NY', 'population': '1000'},
'Michigan':{'abrv': 'MI','population': '1000'}}



for state in states1:
  print "%s has the abbreviation %s and a population of %s" %(state, states1[state]['abrv'], states1[state]['population'])

剛剛看了最后一篇文章,那很有道理。 至於這怎么用,我不知道,那只是我想做的,對一個鍵有三個值。 我敢肯定,將來我可以從網站或數據庫中獲取信息,並將其創建成對,例如從演員到扮演的角色,但也許不是。 只是讓我煩惱,我無法自己弄清楚。

暫無
暫無

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

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