无法使用Python使用Variable调用Dictionary

时间:2013-07-04 00:31:50

标签: python string dictionary

我只使用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

在上面的例子中,我理解了解释器 期待一个整数,因为它会查看该值 “country”作为字符串而不是字典...... 就像我把国家[2]用日本作为输入(例如), 它将返回字符“p”。但很明显 不是我的意图。

我有办法解决这个问题吗?

2 个答案:

答案 0 :(得分: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"])

答案 1 :(得分: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的建议实际上要好得多。