Python中如何以更Pythonic的方式生成所有元素对及对应字典
更Pythonic的实现方案
直接用Python标准库itertools的工具替代手写嵌套循环即可,代码更简洁,也不容易出索引错误。
实现逻辑
- 展平嵌套的输入列表,保序去重得到所有节点的全局排列顺序,保证生成的键顺序和预期一致
- 预处理每个节点所属的原始子列表ID,用来快速判断两个节点的匹配关系
- 用
itertools.combinations自动生成所有按顺序排列的两两节点对,不需要手写两层循环控制索引
完整代码
from itertools import chain, combinations input_data = [ ["s5"], ["s7"], ["s9", "s773"], ["s4", "s17"] ] # 展平列表并保序去重,得到所有节点的全局顺序 all_nodes = list(dict.fromkeys(chain.from_iterable(input_data))) # 构建节点到所属分组的映射,重复节点保留第一次出现的分组 node_group = {} for group_id, group in enumerate(input_data): for node in group: node_group.setdefault(node, group_id) result = {} for node_a, node_b in combinations(all_nodes, 2): key = f"{node_a}_{node_b}" # 此处修改判断逻辑即可匹配你的布尔值规则,示例为同组返回True result[key] = (node_group[node_a] == node_group[node_b])
补充说明
如果你示例里的布尔值有额外判断规则,只需要修改最后给result[key]赋值的布尔表达式即可,遍历生成键的逻辑不需要调整。这种写法是Python处理组合遍历场景的通用惯例,不需要手动维护循环索引,能避免很多低级错误。
内容的提问来源于stack exchange,提问作者Exploring
相关产品推荐
相关产品推荐

