我有这个字典
{
'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
答案 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)
请注意,除非使用OrderedDict
或dict
插入顺序的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=',')