如何访问嵌套在字典中的字典的值

时间:2019-10-17 07:22:56

标签: python

我需要编写一个函数,该函数接受一个字典,其键等于名称,并且值是字典。嵌套在其中的字典的键等于任务,其值等于任务花费的小时数。我需要返回以任务为键及其值的字典,以名称为键并以小时为值的字典。

我不知道如何访问嵌套字典中的值,因此嵌套字典中的值与键相同。 这是我所拥有的:

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'}}

3 个答案:

答案 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()来获取值。