如何实现字典列表中values的指定交叉配对生成元组
解决多列表元素配对问题
原始数据
dvalues = [{'column': 'Environment', 'parse_type': 'iter', 'values': ['AirportEnclosed', 'Bus', 'MotorwayServiceStation']}, {'column': 'Frame Type', 'parse_type': 'list', 'values': ['All']}]
期望输出
('AirportEnclosed', 'All') ('Bus', 'All') ('MotorwayServiceStation', 'All')
当前代码及错误输出
当前代码
for d in dvalue: dv = d['values'] zip_list = zip(dv, d['values']) for z in zip_list: print(z)
错误输出
('AirportEnclosed', 'AirportEnclosed') ('Bus', 'Bus') ('MotorwayServiceStation', 'MotorwayServiceStation') ('All', 'All')
修改方案
当前代码的问题是把每个列表的元素和自身配对,而非取两个不同列表的元素做跨列表全组合。可以通过以下两种方式修改:
方式一:嵌套循环
先提取两个独立的列表,再通过嵌套循环完成配对:
# 提取两个列表的元素 env_list = dvalues[0]['values'] frame_list = dvalues[1]['values'] # 嵌套循环生成配对 for env in env_list: for frame in frame_list: print((env, frame))
方式二:使用itertools.product(更简洁)
利用itertools.product直接生成多个可迭代对象的笛卡尔积,适合多列表配对场景:
import itertools env_list = dvalues[0]['values'] frame_list = dvalues[1]['values'] for pair in itertools.product(env_list, frame_list): print(pair)
两种方式都能输出你期望的配对结果。
内容的提问来源于stack exchange,提问作者gdogg371
相关产品推荐
相关产品推荐

