我需要编写一个函数,该函数接受一个字典,其键等于名称,并且值是字典。嵌套在其中的字典的键等于任务,其值等于任务花费的小时数。我需要返回以任务为键及其值的字典,以名称为键并以小时为值的字典。
我不知道如何访问嵌套字典中的值,因此嵌套字典中的值与键相同。 这是我所拥有的:
def sprintLog(sprnt):
new_dict = {}
new_dict = {x: {y: y for y in sprnt.keys() if x in sprnt[y]} for l in sprnt.values() for x in l}
return new_dict
如果我通过字典,例如:
d = {'Ben': {'task1': 5}, 'alex': {'task1': 10, 'task2': 4}}
我希望得到一个字典,例如:
new_dict = {'task1': {'Ben': 5, 'alex': 10}, 'task2': {'alex': 4}}
但是我现在得到的是:
new_dict = {'task1': {'Ben': 'Ben', 'alex': 'alex'}, 'task2': {'alex': 'alex'}}
答案 0 :(得分:1)
这对我有用
def sprintLog(sprnt):
new_dict = {}
new_dict = {x: {y: sprnt[y][x] for y in sprnt.keys() if x in sprnt[y]} for l in sprnt.values() for x in l}
return new_dict
print(sprintLog({'Ben': {'task1': 5}, 'alex': {'task1': 10, 'task2': 4}}))
答案 1 :(得分:1)
即使以上关于列表理解的答案是正确的,我也将其滑动以更好地理解:)
from collections import defaultdict
def sprintLog(sprnt): # d = {'Ben': {'task1': 5}, 'alex': {'task1': 10, 'task2': 4}}
new_dict = defaultdict(dict)
for parent in sprnt.keys():
for sub_parent in sprnt[parent].keys():
new_dict[sub_parent][parent] = sprnt[parent][sub_parent]
return new_dict
a = sprintLog({'Ben': {'task1': 5}, 'alex': {'task1': 10, 'task2': 4}})
print(a)
答案 2 :(得分:0)
我认为这就是您想要的:
d = {'Ben': {'task1': 5}, 'alex': {'task1': 10, 'task2': 4}}
def sprintLog(sprnt):
return {x: {y: f[x] for y,f in sprnt.items() if x in sprnt[y]} for l in sprnt.values() for x in l}
print(sprintLog(d))
您需要使用sprnt.items()
而不是sprnt.keys()
来获取值。