2012-04-25 11 views
2

私は提案したように私の最初のpythonプログラムとしてテキストアドベンチャーゲームを書いています。犬が食べられる可能性のあるもの、悪いもの、悪いもののリストを持っていたい。だから、私は思っI'dは、次の操作を行います。ジップを使用してインクリメンタルリスト名を関数に渡す辞書のリスト

badfoods = [] 
keys = ['Food','Problem','Imminent death'] 

food1 = ['alcohol', 'alcohol poisoning', 0] 
food2 = ['anti-freeze', 'ethylene glycol', 1] 
food3 = ['apple seeds', 'cyanogenic glycosides', 0] 

badfoods.append(dict(zip(keys,food1))) 
badfoods.append(dict(zip(keys,food2))) 
badfoods.append(dict(zip(keys,food3))) 

私に含める約40食品が実際にあります。私は、私もこれを行うことができます知っている: What is the best way to implement nested dictionaries? を私はまだキートンを書き込まないようにする方法が表示されない:

[{'Food':'alcohol', 'Problem':'alcohol poisoning', 'Imminent death':0}, 
{'Food':'anti-freeze', 'Problem':'ethylene glycol', 'Imminent death':1} 
{'Food':'apple seeds, 'Problem':'cyanogenic glycosides', 'Imminent death':0}] ] 

は、私もアピールされ、YAMLを使用することについて、ここにこの記事を読んでください。私はループのためですので、私はそれが仕事をdoesn't仮定

def poplist(listname, keynames, name): 
    listname.append(dict(zip(keynames,name))) 

def main(): 
    badfoods = [] 
    keys = ['Food','Chemical','Imminent death'] 

    food1 = ['alcohol', 'alcohol poisoning', 0] 
    food2 = ['anti-freeze', 'ethylene glycol', 1] 
    food3 = ['apple seeds', 'cyanogenic glycosides', 0] 
    food4 = ['apricot seeds', 'cyanogenic glycosides', 0] 
    food5 = ['avocado', 'persin', 0] 
    food6 = ['baby food', 'onion powder', 0] 

    for i in range(5): 
     name = 'food' + str(i+1) 
     poplist(badfoods, keys, name) 

    print badfoods 
main() 

Plusは、私がある、私はAPPEND 40回を書い回避に私の元のアプローチを把握can'tことをイライラしています文字列を作成してそれを関数に渡すと、関数poplistはそれを変数名として認識しません。しかし、これを修正する方法があるのか​​、YAMLを使うかキーを毎回書き出す必要があるかどうかはわかりません。私は困っているので、どんな助けもありがとう!

答えて

3

あなたは近くにあった。

>>> keys = ['Food','Chemical','Imminent death'] 
>>> foods = [['alcohol', 'alcohol poisoning', 0], 
      ['anti-freeze', 'ethylene glycol', 1], 
      ['apple seeds', 'cyanogenic glycosides', 0]] 
>>> [dict(zip(keys, food)) for food in foods] 
[{'Food': 'alcohol', 'Chemical': 'alcohol poisoning', 'Imminent death': 0}, {'Food': 'anti-freeze', 'Chemical': 'ethylene glycol', 'Imminent death': 1}, {'Food': 'apple seeds', 'Chemical': 'cyanogenic glycosides', 'Imminent death': 0}] 
3

あなたはそれ最初の場所で単一の構造にする場合、それはbleepton簡単です。

foods = [ 
    ['alcohol', 'alcohol poisoning', 0], 
    ['anti-freeze', 'ethylene glycol', 1], 
    ['apple seeds', 'cyanogenic glycosides', 0], 
    ['apricot seeds', 'cyanogenic glycosides', 0], 
    ['avocado', 'persin', 0], 
    ['baby food', 'onion powder', 0] 
] 
badfoods = [dict(zip(keys, food)) for food in foods] 
0

私はベストプラクティスに従い、コードからデータを分離することをお勧めします。あなたのニーズに最も適したフォーマットを使用して、データを別のファイルに保存してください。これまでに投稿したことから、CSVは自然な選択と思われます。あなたのメインプログラムで

# file 'badfoods.csv': 

Food,Problem,Imminent death 
alcohol,alcohol poisoning,0 
anti-freeze,ethylene glycol,1 
apple seeds,cyanogenic glycosides,0 

それをロードするためだけの2行を取ります

from csv import DictReader 

with open('badfoods.csv', 'r') as f: 
    badfoods = list(DictReader(f)) 
+0

、このような「ベスト・プラクティス」のための動機は、彼らが本当にために作られた言語のようにPythonでのように強くありません、イモ。 –

+0

@KarlKnechtel:コードとデータをまとめることは、どの言語でも悪い考えです。説明のためにこの非常に質問を参照してください。 – georg

関連する問題