2016-06-13 12 views
0

私はPythonにはあまり新しくないので、私と一緒に裸にしてください(難しい方法を覚えているPythonを使用してください)。複数の値を持つPython Dictキー

私は辞書について学んでいます.2つの辞書をもう1つ作成することでこれを行うことができますが、簡潔にするために、2つ以上のdictを作成する必要はありません最後に、このディクテーションのために書いたものはすべて他のディクテーションに書き込まなければならないだろう)、私は何よりも好奇心が強いと思います。そして、私はfor-loopを使うべきではないことを知っていますが、私は別の方法を知らず、LPTHを吸うまではどこかに出発しなければなりませんでした。

質問1:これをどのように各州/略語/都市を循環させることができますか?複数のディクテーションや一連のリストを作成して使用する必要がありますか? question2:なぜこのコードはforループを11回実行しますか?

states1 = { 
    '1': 'Oregon', 'a': 'OR','population': '1000', 
    '2': 'Florida', 'b': 'MI', 'population': '1000', 
    '3': 'California', 'c': 'CA', 'population': '1000', 
    '4': 'NewYork', 'd': 'NY', 'population': '1000', 
    '5': 'Michigan','e': 'MI','population': '1000', 
} 

for city, pop, in states1.items(): 
    print "%s has the abbreviation %s and a population of %s" %states1['1'], states1['a'], states1['population']) 

答えて

1

理想的には、ホーミングなデータ構造を持つとします。 a listdict です。各dictが特定の状態に関する情報を保持します:

states1 = [ 
    {'name': 'Oregon', 'abbrev': 'OR', 'population': 1000}, 
    {'name': 'Florida', 'abbrev': 'FL', 'population': 1000}, 
    ..., 
] 

を今すぐあなたのループは次のようになります。

for state in states1: 
    print print "%s has the abbreviation %s and a population of %s" % (state['name'], states['abbrev'], states['population']) 

ここでの利点は、うまくいけば明らかです。任意の状態について、同じ方法で関連情報を取得します(状態名は常に'name'キーを介して到達可能です)。

あなたは状態名(例えば、あなたが彼らの略語で州の人口の束を見てみたい)のマッピングが必要な場合は、辞書を作成することにより、かなり簡単にそれを行うことができます...

abbrev_to_state = {state['abbrev']: state for state in states1} 
florida_data = abbrev_to_state['FL'] 
new_hampshire_data = abbrev_to_state['NH'] 
... 

その他のオプションもあります...カスタムクラスを使用できますが、データの変更を計画していないと仮定すると、これもcollections.namedtupleのリストの候補に見えます。

+0

これはTON mgilbsonを助け、私はそれについて考えなかったとは信じられません。今はとてもばかばかしいようです! – Wolverine

0

各値をリストにすることができます。

私はあなたが達成したい正確に何を理解していませんが、簡単な方法は次のようになります。あなたがアップになりますもう一つは、それはあなたがしたいときのための私のお気に入りのデータ構造の一つであり、named tupleある

states1 = { 
1: ["Oregon", "OR", 1000] 
2: ["Florida", "FL", 1000] 
3: ["Pythonville", "PY", 1000] 
4: ["Dictville", "DI", 1000] 
} 

データをすばやく整理できます。

from collections import namedtuple 

CityInfo = namedtuple("CityInfo", ["Name", "Abbr", "Pop"]) 

states1 = { 
      1: CityInfo("Oregon", "OR", 1000), 
      2: CityInfo("Florida", "FL", 1000), 
      3: CityInfo("Pythonville", "PY", 1000), 
      4: CityInfo("Dictville", "DI", 1000) 
      } 

for city in states1.values(): 
    print("{} has the abbreviation {} and a population of {}".format(city.Name, city.Abbr, city.Pop)) 
+1

FWIW、キーとしての連続した整数を持つ命令は、メモリの無駄のようです。この場合、通常は 'list'が良いでしょう:-) – mgilson

+0

True、yeah。しかし、彼のコードを完全に変更したくはありませんでした。 – SirSteel

0

あなたは(下)に私をお勧めしますように私はそれを実行すると、それは

Michigan has the abbreviation MI and a population of 1000 
Michigan has the abbreviation MI and a population of 1000 
Michigan has the abbreviation MI and a population of 1000 

ない理由、継続的にそれが選択するためにいくつかの理由のためだった場合、私は推測しているだろう、ということやって確認を吐き出しますそれは時々重複して、毎回状態を変える辞書なので完全にランダムな状態です。

states1 = { 
    'state': 'Oregon', 'abbrev': 'OR','population': '10000', 
    'state': 'Florida', 'abbrev': 'MI', 'population': '1000', 
    'state': 'California', 'abbrev': 'CA', 'population': '1000', 
    'state': 'NewYork', 'abbrev': 'NY', 'population': '1000', 
    'state': 'Michigan','abbrev': 'MI','population': '1000', 
} 

for city, pop, in states1.items(): 
    print "%s has the abbreviation %s and has a population of %s" % (states1['state'], states1['abbrev'], states1['population']) 
0

必要に応じてデータを構成する方法の別の例。

states1 = { 
'Oregon': {'abrv': 'OR','population': '1000'}, 
'Florida':{ 'abrv': 'MI', 'population': '1000'}, 
'California':{'abrv': 'CA', 'population': '1000'}, 
'NewYork':{'abrv': 'NY', 'population': '1000'}, 
'Michigan':{'abrv': 'MI','population': '1000'}} 



for state in states1: 
    print "%s has the abbreviation %s and a population of %s" %(state, states1[state]['abrv'], states1[state]['population']) 
+0

最初の提案と同じように、これは本当に完璧だったと思っていましたが、どちらもエラーです。この1は、%sは、略語%sがあり、%sの "%(状態、states1 [状態] [ '略語']の人口を持っている "ライン12は、 印刷では、" ex39-test2.py「ファイル" と言いますTypeError:unhashable type: 'dict' " – Wolverine

+0

あなたは正確なコードがあればそのエラーをなぜ受け取っているのか分かりません。私が辞書をキーとして使用しようとすると、unhashable dictタイプが発生します。 – user4642224

0

ちょうど最後の投稿を見ましたが、それはかなり意味があります。これがどのように役立つかについては分かりませんが、私がやりたいことだったので、1つのキーに3つの値があります。私は将来、ウェブサイトやデータベースから情報を取得して、キャラクターの演技者のようにペアを作成してもらうことができますが、そうでないかもしれません。それは私が自分では理解できなかった悩まされたものだった。

関連する問題