如何在Python中从dict获取嵌套值

时间:2019-06-06 13:54:04

标签: python python-3.x

我有这个字典

{
    'name': 'Katty', 
    'assignment': [80, 50, 40, 20],
    'test': [75, 75], 
    'lab': [78.2, 77.2]
}

我希望得到以下输出:

80
50
40
20
75
75
78.2
77.2

但是我只得到分配的数字,我不想做3个不同的循环(对于分配,测试和实验)。有没有更好的解决方案来获得所需的输出?

这是我到目前为止所拥有的:

for i in Katty['assignment']:
    print(i)

80
50
40
20

4 个答案:

答案 0 :(得分:4)

d = {'name': 'Katty', 'assignment': [80, 50, 40, 20], 'test': [75, 75], 'lab': [78.2, 77.2]}

output = []

for val in d.values():
    if isinstance(val, list):
        output += val

print(output) # [80, 50, 40, 20, 75, 75, 78.2, 77.2]

或单线:

output = [x for val in d.values() if isinstance(val, list) for x in val]

对于所需的输出,您可以将其打开包装以打印出来,而无需使用逗号或括号:

print(*output)

请注意,除非使用OrderedDictdict插入顺序的Python3.7 +,否则无法保证输出的顺序。

答案 1 :(得分:2)

Katty = {'name': 'Katty', 'assignment': [80, 50, 40, 20], 'test': [75, 75], 'lab': [78.2, 77.2]}
print(Katty['assignment'] + Katty['test'] + Katty['lab'])

答案 2 :(得分:2)

如果

data = {'name': 'Katty', 'assignment': [80, 50, 40, 20], 'test': [75, 75], 'lab': [78.2, 77.2]}

这是地图中经过拼合的值列表,方法是获取列表类型的每个值,然后从该列表中获取每个值,

list_values = [value for values in data.values() if type(values) == list for value in values]

并将此列表转换为由空格转换的值字符串:

list_values_str = " ".join(map(str, list_values))

请参阅documentation以了解联接和映射的作用。

答案 3 :(得分:1)

这是一行,用于打印“任务”,“测试”,“实验室”的值

print(*(d['assignments'] + d['test'] + d['lab']))

使用+对列表进行加法运算会追加列表。

因此d['assignments'] + d['test'] + d['lab']的结果将是一个包含所有这些列表中的元素的新列表。

*放在打印列表之前,将元素拆包并使用空格分隔。

如果要使用逗号或其他分隔符,则可以在print语句中指定为

print(*(d['assignments'] + d['test'] + d['lab']), sep=',')