2016-09-20 9 views
0

私たちの先生は、ユーザーが要素のシンボルを入力できるようにするためのプログラムを作成することに挑戦し、プログラムはその要素に関する情報を出力する必要があります。辞書のキーから特定の値をプリントする方法は?

これを行うには、辞書を使用する必要があります。現在、私はこれを持っています:

elements = {"Li": "Lithium" " 12" " Alkali Metal"} 
element = input("Enter an elemental symbol: ") 
print (elements[element]) 

これは、Liに関連するすべてのものを印刷します。

Liと関連するすべてのものではなく、Alkali Metalと言うだけの出力しかできないのでしょうか? (はい、私は12がリチウムの原子番号ではないことを知っています)

+0

を私はあなたの辞書がされるべきだと思います。現在、すべての値は単一のキーの中にあります –

+0

@MoinuddinQuadri:おそらく '{" Li ":(" Lithium "、" 12 "、" Alkali Metal ")}'(または、 ":(" Lithium "、12、" Alkali Metal ")})、それぞれのキーはそれに関連する3つの離散データを持つように見えますが、OPは文字列リテラル連結ルールを理解せず、そのキーに複数の 'str'を関連付けます。または、匿名の 'tuple'の代わりに、' 'collections.namedtuple'(https://docs.python.org/3/library/collections.html#collections.namedtuple)を使用して値をアクセスすることができます名前付き属性。 – ShadowRanger

+0

@PadraicCunningham:ええ、OPはどの情報をどのように出力するかを決定する方法について非常に明確ではありません。ルックアップするフィールドが一度設定され、繰り返し使用される場合、 'operator.attrgetter'が便利かもしれませんが、要素と属性の両方が変更されていないと仮定します。 – ShadowRanger

答えて

6

あなたは現在、値として1つの文字列を持っていますので、あまり信頼できることはありません。それからちょうどあなたが取得したいものを特定の値のキーを使用して、ネストされた辞書にアクセス

elements = {"Li": {"full_name":"Lithium", "num":"12", "type":"Alkali Metal"}} 

In [1]: elements = {"Li": {"full_name":"Lithium", "num":"12", "type":"Alkali Metal"}} 

In [2]: elements["Li"]["num"] 
Out[2]: '12' 

In [3]: elements["Li"]["full_name"] 
Out[3]: 'Lithium' 

In [4]: elements["Li"]["type"] 
Out[4]: 'Alkali Metal' 

場合、あなたはサブ辞書で行うことができます別の値を保存する必要がありますあなたは、各部分を分離していないカンマで文字列を持っている、Pythonは単一の文字列を作成します:{「李」:「リチウム」、「12」:「アルカリ金属」}

In [5]: "Lithium" " 12" " Alkali Metal" 
Out[5]: 'Lithium 12 Alkali Metal' 
In [6]: "Lithium","12","Alkali Metal" 
Out[6]: ('Lithium', '12', 'Alkali Metal') # now its a three element tuple 
関連する問題