タプル [の値] に由来するキーを使用して辞書を構築しようとしています。これらのキーの値は、辞書のキーと に初期化されたサブキーの値から形成された新しい辞書である必要があります0
。
タプルは次のようになります。
characters = ('Fred', 'Sam', 'Bob', 'Daisy', 'Gina', 'Rupert')
関連する辞書は次のようになります。
jobs = {
'Pizzeria': 1,
'Mall Kiosk': 2
'Restaurant': 3
'Burger Joint': 4
'Department Store': 5
}
最終的な構造を次のようにしたいと思います。
jobsWorkedCounter = {
'Fred': {
'Pizzeria': 0,
'Mall Kiosk': 0
'Restaurant': 0
'Burger Joint': 0
'Department Store': 0
},
'Sam': {
'Pizzeria': 0,
'Mall Kiosk': 0
'Restaurant': 0
'Burger Joint': 0
'Department Store': 0
},
...
'Rupert': {
'Pizzeria': 0,
'Mall Kiosk': 0
'Restaurant': 0
'Burger Joint': 0
'Department Store': 0
},
}
最終的な目標は、カウンターをインクリメントするための構造を持つことです。
jobsWorkedCounter['Fred']['Burger Joint'] += 1
さまざまなネストされた内包表記を使用してみました:
jobsWorkedCounter = { char: dict((key, 0) for key in jobs.keys()) for char in characters }
# and
jobsWorkedCounter = { char: dict(jobs.keys(), 0) for char in characters }
# and
jobsWorkedCounterDict = { key: 0 for key in jobs.keys() }
jobsWorkedCounter = { char: jobsWorkedCounterDict for char in characters }
# and
jobsWorkedCounter = { char: { key: 0 for key in jobs.keys() } for char in characters }
そして単純なfor
ループ:
jobsWorkedCounter = { char: {} for char in characters }
for char in characters:
jobsWorkedCounter[char] = dict.fromkeys(jobs.keys(), 0)
しかし、私が達成できた最高のものは、フルセットではなく単一のサブキーです:
jobsWorkedCounter = {
'Fred': {
'Pizzeria': 0,
},
'Sam': {
'Pizzeria': 0,
},
...
'Rupert': {
'Pizzeria': 0,
},
}
私が何をしようとしても、新しい辞書を単一のキーと値のペアにフラット化することに成功しているようです。それがタプルからキーに割り当てられます。
自分がやろうとしていることをどのように達成できますか?
また、これを間違って行っている場合に備えて、出力を確認するために、次のようにしています。
keys = jobsWorkedCounter['Fred'].keys()
raise Exception(keys)
それは私を得る:
Exception: [u'Pizzeria']
私が期待する場所:
Exception: [u'Pizzeria', u'Mall Kiosk', u'Restaurant', u'Burger Joint', u'Department Store']
キーを表示するこの方法は、次のように変更すると機能するはずです。
keys = jobsWorkedCounter.keys()
raise Exception(keys)
私は得る:
Exception: [u'Fred', u'Sam', u'Bob', u'Daisy', u'Gina', u'Rupert']
補遺
Ren'Py 環境にいるため、Python 2.7 の使用に行き詰まっています (したがって、出力を表示するために例外を発生させる理由です)。
例えば:
from pprint import pprint
私に与えます:
Import Error: No module named pprint