【发布时间】:2017-05-04 01:33:33
【问题描述】:
我正在尝试以递归方式获取字典的所有组合,但我不知道如何正确获取输出。本质上是一种深度优先搜索,它将输入保存在(键,值)元组或类似的东西中。任何帮助表示赞赏。谢谢/弗雷德
输入:
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
edit:perms 需要递归绘制。也许一个插图可以说明一点:
树形结构有效,但对我的目的来说不够通用,而且编辑起来很麻烦。
更新:目前我正在对这些进行硬编码:
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 中。
【问题讨论】:
-
字典的所有组合你必须更精确。按键?价值观?
-
@JoeD 发布了一个优雅的答案,其中包含
[[perm for perm in itertools.product([k], v)] for k, v in d.items()]之类的内容,现已删除。 -
我不认为字典是您想要实现的输出的正确数据结构。此外,您的图表只有
1和2作为项目值,这是您希望输出具有的吗? -
@Fred 您可以考虑简单地构建一棵树:stackoverflow.com/questions/2358045/…。让我知道这是否有帮助!我很乐意进一步讨论构建这些数据的更好方法:)
-
@AetherUnbound 一个节点树可以工作,但概括起来有点麻烦,所以我选择不使用它创建答案,因为我必须使用另一种数据结构而不是上面的数据结构。不过感谢您的建议:)
标签: python dictionary recursion set permutation