2

Python を使って数か月しか経っていないので、ばかげた質問をしていたら申し訳ありません。変数を使用して辞書名を呼び出すのに問題があります。

問題は、変数を使用してディクショナリ & [] 演算子を呼び出すと、Python がコードを解釈して、ディクショナリ リスト内のものではなく文字列内の 1 文字を返そうとすることです。

例で説明すると...以下のような辞書リストがあるとしましょう。


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は、引数が指定されていない場合、組み込み関数が現在の名前空間の変数 (およびその他のもの) の辞書を返すためです。文字列としての各変数名は、dict のキーになります。

しかし、@tom の提案は、実際にははるかに優れたものです。

于 2013-07-04T01:17:49.217 に答える