2

提案されているように、最初のpythonプログラムとしてテキストアドベンチャーゲームを書いています。犬が食べる可能性のあるもの、何が悪いのか、どの程度悪いのかのリストが欲しい. だから、私はこれをやろうと思った:

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種類あります。私もこれを行うことができることを知っています:

[{'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 の使用に関するこちらの投稿も読みました。これは魅力的です: ネストされた辞書を実装する最良の方法は何ですか? しかし、キーを大量に書き込むことを避ける方法はまだわかりません。

さらに、追加を 40 回書くことを避けるための元のアプローチを理解できないことに腹を立てています。つまり、次のとおりです。

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()

forループが文字列を作成してから関数に供給し、関数poplistがそれを変数名として認識しないため、機能しないと思います。ただし、これを修正する方法があるかどうか、または YAML を使用する必要があるか、キーを毎回書き出す必要があるかどうかはわかりません。私は困惑しているので、どんな助けも大歓迎です!

4

3 に答える 3

5

そもそも単一の構造にするだけで簡単にブリープトンになります。

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]
于 2012-04-25T18:43:50.617 に答える
4

あなたは近くにいました:

>>> 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}]
于 2012-04-25T18:43:46.630 に答える
1

ベスト プラクティスに従い、データをコードから分離することをお勧めします。必要に応じて最も適した形式を使用して、データを別のファイルに保存するだけです。これまでの投稿から、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))
于 2012-04-25T19:15:56.210 に答える