寻求Pythonic方法:从列表与字典生成二元组
解决方法:用
zip()实现一一配对的二元组 嘿,你遇到的问题其实很常见——itertools.product会生成两个列表的笛卡尔积(也就是所有可能的元素组合),所以才会得到不符合预期的结果。而你需要的是两个列表按位置一一对应的二元组,这时候Python内置的zip()函数就是最Pythonic的解决方案!
具体实现代码
先回顾下你的原始数据生成代码:
a_ids = ['A_%' % i for i in range(1,4)] # 输出: ['A_1', 'A_2', 'A_3'] a_dict = [{'A': i} for i in range(1,4)] # 输出: [{'A': 1}, {'A': 2}, {'A': 3}]
只需要一行代码就能得到你想要的结果:
result = list(zip(a_ids, a_dict)) print(result)
运行后输出正好是你期望的:
[('A_1', {'A': 1}), ('A_2', {'A': 2}), ('A_3', {'A': 3})]
为什么这是Pythonic的?
zip()是Python内置函数,专门用于并行迭代,把多个可迭代对象中相同位置的元素配对成元组,完全契合你的需求。- 代码简洁直观,符合Python“简单优于复杂”“用内置工具解决常见问题”的设计哲学,不需要引入额外的库(比如你之前用的
itertools在这里是没必要的)。
补充说明
如果你的两个列表长度不一致,zip()会以较短的列表长度为准,自动截断较长的列表。如果需要保留所有元素(用None填充缺失的位置),可以用itertools.zip_longest,不过你的场景里两个列表长度相同,zip()就足够啦。
内容的提问来源于stack exchange,提问作者sven
相关产品推荐
相关产品推荐

