关于python列表字典嵌套结构遍历取值的问题

假如从数据库得到这样一个字典列表的嵌套


[{'姓名': '李华', '数学': 86, '英语': 73, '物理': 91, '化学': 84},
{'姓名': '张明', '数学': 85, '英语': 74, '物理': 90, '化学': 84},
{'姓名': '华李', '数学': 84, '英语': 75, '物理': 91, '化学': 84},
{'姓名': '明张', '数学': 83, '英语': 76, '物理': 90, '化学': 84},
{'姓名': '小李', '数学': 82, '英语': 77, '物理': 91, '化学': 84}]

想通过一个整体的for循环,得到下面的各门分数的列表组,但不希望每个字段写一个循环,也就是说当数据库多出一个字段例如“生物”时,代码不用人为地进行调整和添加,应该如何实现?

[86,85,84,83,82]#数学
[73,74,75,76,77]#英语
[91,90,91,90,91]#物理
[84,84,84,84,84]#化学

按照键名称合并到数组中

img

def groupKey(lst):
    keys=lst[0].keys()
    dict={}
    for key in keys:
        dict[key]=[]
    for item in lst:
        for key in keys:
            dict[key].append(item.get(key))
    return dict

lst= [{'姓名': '李华', '数学': 86, '英语': 73, '物理': 91, '化学': 84},
{'姓名': '张明', '数学': 85, '英语': 74, '物理': 90, '化学': 84},
{'姓名': '华李', '数学': 84, '英语': 75, '物理': 91, '化学': 84},
{'姓名': '明张', '数学': 83, '英语': 76, '物理': 90, '化学': 84},
{'姓名': '小李', '数学': 82, '英语': 77, '物理': 91, '化学': 84}]
dict=groupKey(lst)
print(dict)

img

你题目的解答代码如下:

li=[{'姓名': '李华', '数学': 86, '英语': 73, '物理': 91, '化学': 84},
{'姓名': '张明', '数学': 85, '英语': 74, '物理': 90, '化学': 84},
{'姓名': '华李', '数学': 84, '英语': 75, '物理': 91, '化学': 84},
{'姓名': '明张', '数学': 83, '英语': 76, '物理': 90, '化学': 84},
{'姓名': '小李', '数学': 82, '英语': 77, '物理': 91, '化学': 84}]
keys=list(li[0].keys())
keys.remove("姓名")
for k in keys:
    li2 = [x[k] for x in li]
    print(li2,k)

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

可以这样

for j in lst[0]:
    if j != '姓名':
        print(j, ': ', [i[j] for i in lst])