Python嵌套列表转字典仅保留最后一组数据问题求助
问题原因
Python字典的键具有唯一性,当你传入重复键的键值对生成字典时,后出现的键对应的值会直接覆盖前面的旧值。
你现在的原始列表每3项就会重复一次Grade、Attendance、Session timings三个相同的键,直接将全部键值对转字典时,前面3组班级的值会被后续的依次覆盖,最终只保留最后一组班级的数据。
而zip结果转列表可以看到全部元组,是因为列表允许存在重复元素,不会做覆盖处理,所以数据完整。
正确实现
通常这种场景你需要的是存储多个班级信息的列表,每个班级对应一个独立字典,这样不会出现键冲突,代码如下:
raw_data = [['Grade', 'V A'], ['Attendance', '16/26'], ['Session timings', '8:00 am - 8:40 am'], ['Grade', 'VII A'], ['Attendance', '24/31'], ['Session timings', '8:50 am - 9:30 am'], ['Grade', 'IX A'], ['Attendance', '20/26'], ['Session timings', '9:40 am - 10:20 am'], ['Grade', 'IX B'], ['Attendance', '21/25'], ['Session timings', '10:50 am - 11:30 am']] result = [] # 每3项为一组,对应一个班级的全部信息 for i in range(0, len(raw_data), 3): class_info = dict(raw_data[i:i+3]) result.append(class_info) print(result)
输出结果:
[ {'Grade': 'V A', 'Attendance': '16/26', 'Session timings': '8:00 am - 8:40 am'}, {'Grade': 'VII A', 'Attendance': '24/31', 'Session timings': '8:50 am - 9:30 am'}, {'Grade': 'IX A', 'Attendance': '20/26', 'Session timings': '9:40 am - 10:20 am'}, {'Grade': 'IX B', 'Attendance': '21/25', 'Session timings': '10:50 am - 11:30 am'} ]
如果你确实需要单字典结构,可以将同个键的所有值存入列表,代码如下:
from collections import defaultdict raw_data = [['Grade', 'V A'], ['Attendance', '16/26'], ['Session timings', '8:00 am - 8:40 am'], ['Grade', 'VII A'], ['Attendance', '24/31'], ['Session timings', '8:50 am - 9:30 am'], ['Grade', 'IX A'], ['Attendance', '20/26'], ['Session timings', '9:40 am - 10:20 am'], ['Grade', 'IX B'], ['Attendance', '21/25'], ['Session timings', '10:50 am - 11:30 am']] result = defaultdict(list) for k, v in raw_data: result[k].append(v) print(dict(result))
输出结果:
{ 'Grade': ['V A', 'VII A', 'IX A', 'IX B'], 'Attendance': ['16/26', '24/31', '20/26', '21/25'], 'Session timings': ['8:00 am - 8:40 am', '8:50 am - 9:30 am', '9:40 am - 10:20 am', '10:50 am - 11:30 am'] }
内容的提问来源于stack exchange,提问作者Arya
相关产品推荐
相关产品推荐

