Python中如何高效将字符串列表映射到两组数值的全组合嵌套字典
问题描述
给定以下列表(实际规模更大,此处为简化示例):
d = ["a", "b", "c", "d"] p = [1,2,3,4] a = [1,2,3,4]
需要将d中的每个字母映射到p与a的所有组合,生成类似如下格式的结构:
{0: {'a': {'p':1, 'a':1}, 'b': {'p':1, 'a':1}, 'c': {'p':1, 'a':1}, 'd': {'p':1, 'a':1}}}
也可以用列表存储,以索引作为组合序号,列表元素为字母与p、a组合字典的完整映射。
最初编写的代码仅能生成单个字母对应组合的字典,无法得到包含所有字母的完整字典;虽写出嵌套循环的可行代码,但因实际列表规模大,该方法效率低下,希望找到更高效的实现方式。
高效实现方案
利用Python标准库的itertools.product生成p和a的笛卡尔积,结合推导式构建目标结构,这种方式基于C底层实现,比纯Python嵌套循环效率高得多,适合大规模数据场景。
代码实现
字典形式输出(键为组合序号)
import itertools d = ["a", "b", "c", "d"] p = [1,2,3,4] a = [1,2,3,4] # 生成p和a的所有组合 pa_pairs = itertools.product(p, a) # 构建目标字典 result_dict = { idx: {char: {'p': p_val, 'a': a_val} for char in d} for idx, (p_val, a_val) in enumerate(pa_pairs) }
列表形式输出(索引为组合序号)
import itertools d = ["a", "b", "c", "d"] p = [1,2,3,4] a = [1,2,3,4] pa_pairs = itertools.product(p, a) # 构建目标列表 result_list = [ {char: {'p': p_val, 'a': a_val} for char in d} for p_val, a_val in pa_pairs ]
效率优势说明
itertools.product是标准库中优化过的工具,生成组合的速度远快于手动嵌套循环。- 推导式的执行效率高于逐元素添加的循环逻辑,内存占用更紧凑。
- 全程无冗余中间变量,避免额外性能损耗。
内容的提问来源于stack exchange,提问作者willem12
相关产品推荐
相关产品推荐

