0

タプル [の値] に由来するキーを使用して辞書を構築しようとしています。これらのキーの値は、辞書のキーと に初期化されたサブキーの値から形成された新しい辞書である必要があります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
4

2 に答える 2