如何将列表的列表数据映射到已声明键的字典并生成字典列表(Python2/3实现)
Python实现子列表转指定键的字典列表
刚好碰到过类似的需求,我来给你分享Python3和Python2的实现方案,保证能完美匹配你的要求:
Python3 实现方案
核心思路是把字典d的键和每个子列表的元素一一配对,用dict(zip())生成对应的字典,再通过列表推导式批量处理所有子列表。
x = [['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11'], ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11'], ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11']] d = {"x": None, "y": None, "z": None, "t": None, "a": None, "s": None, "m": None, "n": None, "u": None, "v": None, "b": None} # 获取字典的键列表,Python3中dict.keys()返回视图对象,转成列表更稳妥 keys = list(d.keys()) # 列表推导式生成目标字典列表 result = [dict(zip(keys, sub_list)) for sub_list in x] # 验证结果 for item in result: print(item)
需要注意:Python3.7及以上版本的标准字典是有序的,键的顺序和你定义d时完全一致。如果你的Python版本低于3.7,建议直接手动定义键的顺序列表(比如keys = ['x', 'y', 'z', 't', 'a', 's', 'm', 'n', 'u', 'v', 'b']),避免因字典无序导致的元素匹配错误。
Python2 实现方案
Python2的标准字典是无序的,所以不建议直接依赖d.keys()的顺序,最好手动指定键的顺序,或者使用OrderedDict来保证顺序。
方案1:手动指定键顺序
# Python2 代码 x = [['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11'], ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11'], ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11']] # 手动定义键的顺序,确保和子列表元素一一对应 keys = ['x', 'y', 'z', 't', 'a', 's', 'm', 'n', 'u', 'v', 'b'] # 生成结果列表 result = [dict(zip(keys, sub_list)) for sub_list in x] # 验证结果 for item in result: print(item)
方案2:使用OrderedDict保证顺序
如果希望保留字典定义时的顺序,可以用collections.OrderedDict:
from collections import OrderedDict # Python2 代码 x = [['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11'], ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11'], ['x1', 'x2', 'x3', 'x4', 'x5', 'x6', 'x7', 'x8', 'x9', 'x10', 'x11']] # 用OrderedDict定义有序字典 d = OrderedDict([ ("x", None), ("y", None), ("z", None), ("t", None), ("a", None), ("s", None), ("m", None), ("n", None), ("u", None), ("v", None), ("b", None) ]) keys = d.keys() # 生成结果列表 result = [dict(zip(keys, sub_list)) for sub_list in x] # 验证结果 for item in result: print(item)
内容的提问来源于stack exchange,提问作者Jordi Lazo
相关产品推荐
相关产品推荐

