Skip to main content
 首页 » 编程设计

Python递归设置值排列字典

2025年05月04日16lhb25

我正在尝试以递归方式获取字典的所有组合,但我不知道如何正确获取输出。本质上是深度优先搜索,它将输入保存在(键,值)元组或类似的东西中。任何帮助表示赞赏。谢谢/弗雷德

输入:

d = {"item1": {1, 2}, 
     "item2": {3, 4}, 
     "item3": {5, 6}} 

输出:

"item1" 1 
"item2" 3 
"item3" 5 
"item3" 6 
"item2" 4 
"item3" 5 
"item3" 6 
"item1" 2 
"item2" 3 
"item3" 5 
"item3" 6 
"item2" 4 
"item3" 5 
"item3" 6 

编辑:烫发需要递归绘制。也许插图可以说明一点:

树结构可行,但对我的目的来说不够通用,而且编辑起来很麻烦。

更新:目前我正在像这样对这些进行硬编码:

d = {"item1": {1, 2}, 
     "item2": {3, 4}, 
     "item3": {i for i in range(1, 5)}} 
 
for k in d["item1"]: 
    print ("item1", k) 
    for j in d["item2"]: 
        print ("item2", j) 
        for i in d["item3"]: 
            print("item3", i) 

递归发生的地方似乎很明显,但我仍然遇到麻烦。到目前为止,谢谢大家的所有建议!如果有任何区别,它也在 python3 中。

请您参考如下方法:

这将返回排列列表。

from itertools import product 
 
perms = [[perm for perm in product([key], d[key]) for key in d]] 

更新以防您正在寻找键值对的可能组合,总共有 18 个。

[print(prod) for prod in product(d, itertools.chain.from_iterable(d.values()))] 

输出:

('item3', 5) 
('item3', 6) 
('item3', 1) 
('item3', 2) 
('item3', 3) 
('item3', 4) 
('item1', 5) 
('item1', 6) 
('item1', 1) 
('item1', 2) 
('item1', 3) 
('item1', 4) 
('item2', 5) 
('item2', 6) 
('item2', 1) 
('item2', 2) 
('item2', 3) 
('item2', 4)