【问题标题】:Trouble calling Dictionary using Variable using Python使用 Python 使用变量调用字典时遇到问题
【发布时间】:2013-07-01 20:42:31
【问题描述】:

我只使用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”。但很明显 这不是我的意图。

有什么办法可以解决这个问题吗?

【问题讨论】:

    标签: python string dictionary


    【解决方案1】:

    您应该将您的国家/地区本身放入字典中,键是国家/地区名称。然后你就可以做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"])
    

    【讨论】:

    • 非常感谢汤姆,这很有帮助!!如果没有您的帮助,我认为我不会考虑使用另一本字典来包装初始字典。再次感谢!
    【解决方案2】:

    免责声明:任何其他方式都肯定比我将要展示的方式更好。这种方式可行,但它不是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 的建议实际上要好得多。

    【讨论】:

    • 您好 Cody,也感谢您提供示例。我也尝试过你的方法,它也确实提供了预期的结果......我没有意识到你可以使用内置的 vars() 函数提供“类似黑客”的方法。我认为如果使用得当,这种方法在特定场合会很有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 2019-01-25
    • 1970-01-01
    相关资源
    最近更新 更多