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”。但显然这不是我的意图。

有没有办法解决这个问题?

4

2 回答 2

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"])
于 2013-07-04T00:34:14.300 回答
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,当没有参数时,返回当前命名空间中的变量(和其他东西)的字典。每个变量名,作为一个字符串,成为字典中的一个键。

但@tom 的建议实际上要好得多。

于 2013-07-04T01:17:49.217 回答