2013-07-04 33 views
2

我只使用python幾個月, 很抱歉,如果我問一個愚蠢的問題。我有 使用變量調用字典名稱的問題。麻煩呼叫字典使用變量使用Python

的問題是,如果我使用一個變量來調用詞典& []運營商, 蟒蛇解釋我的代碼試圖將字符串 而不是字典列表中任何回報的單個字符。

舉一個例子來說明...比方說我 有一個像下面這樣的字典列表。


USA={'Capital':'Washington', 
    'Currency':'USD'} 

Japan={'Capital':'Tokyo', 
     'Currency':'JPY'} 

China={'Capital':'Beijing', 
     'Currency':'RMB'} 

country=input("Enter USA or JAPAN or China? ") 

print(USA["Capital"]+USA["Currency"]) #No problem -> WashingtonUSD 
print(Japan["Capital"]+Japan["Currency"]) #No problem -> TokyoJPY 
print(China["Capital"]+China["Currency"]) #No problem -> BeijingRMB 
print(country["Capital"]+country["Currency"]) #Error -> TypeError: string indices must be integers 

在上面的例子中,我明白瞭解釋,因爲它認爲「國家」的價值 作爲字符串而不是字典 期待一個整數... 一樣,如果我把國家[2]用日本作爲輸入(例如), 它會返回字符「p」。但很明顯, 不是我的意圖。

有沒有辦法解決這個問題?

回答

2

你應該把自己的國家放進一本字典中,其中的關鍵字是國家名稱。然後,你就可以做COUNTRIES[country]["Capital"]

例子:

COUNTRIES = dict(
    USA={'Capital':'Washington', 
     'Currency':'USD'}, 
    Japan={'Capital':'Tokyo', 
      'Currency':'JPY'}, 
    ... 
) 
country = input("Enter USA or Japan or China? ") 
print(COUNTRIES[country]["Capital"]) 
+0

謝謝你這麼多湯姆,這是非常有益的!我不認爲如果沒有你的幫助,我會考慮用另一本字典來包裝最初的字典。再次,謝謝! – user2511875

1

免責聲明:做任何其他方式爲比我約的方式來顯示絕對更好。這種方式將工作,但它是不pythonic。我提供它用於娛樂目的,並顯示Python很酷。

USA={'Capital':'Washington', 
    'Currency':'USD'} 

Japan={'Capital':'Tokyo', 
     'Currency':'JPY'} 

China={'Capital':'Beijing', 
     'Currency':'RMB'} 

country=input("Enter USA or Japan or China? ") 

print(USA["Capital"]+USA["Currency"]) #No problem -> WashingtonUSD 
print(Japan["Capital"]+Japan["Currency"]) #No problem -> TokyoJPY 
print(China["Capital"]+China["Currency"]) #No problem -> BeijingRMB 

# This works, but it is probably unwise to use it. 
print(vars()[country]["Capital"] + vars()[country]['Currency']) 

這工作,因爲內置的功能vars,如果沒有參數,返回在當前的命名空間的變量(和其他的東西)的字典。每個變量名稱作爲字符串成爲字典中的一個鍵。

但是@湯姆的建議實際上是一個更好的建議。

+0

嗨科迪,謝謝你也提供了一個例子。我也試過你的方法,它也提供了預期的結果......我沒有意識到你可以使用內置的vars()函數提供一種類似'hack-like'的方法。我認爲,如果使用得當,這種方法在特定的場合會很有用。 – user2511875