我正在尝试使用来自元组 [the values of] 的键来构建字典,这些键的值应该是由字典的键和初始化为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