如何将Python列表与字典逐行合并?
问题描述
我有两类数据,分别是一个字典和一个列表,示例如下:
data_1 = { '583015': 7, '583016': 0, '583017': 0, '583018': 22, '583019': 74, '583020': 56, '583021': 108, '583022': 56, '583023': 72, '583024': 45, } data_2 = [ '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', ]
我一开始写了这段代码:
for i in data_1: print(i)
但发现没法在这个循环里嵌套遍历data_2的循环,现在需要把data_1和data_2逐行合并,得到如下预期结果:
combined = { '1': 7, '2': 0, '3': 0, '4': 22, '5': 74, '6': 56, '7': 108, '8': 56, '9': 72, '10': 45 }
解决方案
核心是把data_2的元素作为新字典的键,data_1的值按顺序对应过去。注意Python 3.7+版本的字典会保留插入顺序,所以可以直接用data_1.values()获取有序的值集合。
方法1:字典推导式 + zip()
combined = {key: value for key, value in zip(data_2, data_1.values())}
zip(data_2, data_1.values())会将两个序列的元素按位置一一配对,再通过字典推导式生成目标字典。
方法2:dict()构造函数 + zip()
更简洁的写法:
combined = dict(zip(data_2, data_1.values()))
zip()返回的配对元组可以直接传入dict()生成新字典。
方法3:基础循环实现
如果偏好循环写法,无需嵌套,直接同时遍历两个序列即可:
combined = {} for key, value in zip(data_2, data_1.values()): combined[key] = value
以上三种方法都能得到你需要的combined字典。
内容的提问来源于stack exchange,提问作者PythonNewbie
相关产品推荐
相关产品推荐

