【问题标题】:Get list of all possible dict configs in Python [duplicate]获取Python中所有可能的dict配置列表[重复]
【发布时间】:2014-12-30 17:39:54
【问题描述】:

我有描述可能的配置值的字典,例如

{'a':[1,2], 'b':[3,4,5]} 

我想生成所有可接受配置的列表,例如

[{'a':1, 'b':3},
 {'a':1, 'b':4},
 {'a':1, 'b':5},
 {'a':2, 'b':3},
 {'a':2, 'b':4},
 {'a':1, 'b':5}]

我查看了文档和 SO,它似乎确实涉及 itertools.product,但如果没有嵌套的 for 循环,我无法得到它。

【问题讨论】:

  • 检查最后一个应该是{'a':2, 'b':5}right??

标签: python dictionary itertools


【解决方案1】:

这里不需要嵌套的 for 循环:

from itertools import product
[dict(zip(d.keys(), combo)) for combo in product(*d.values())]

product(*d.values()) 生成您所需的值组合,dict(zip(d.keys(), combo)) 再次将每个组合与键重新组合。

演示:

>>> from itertools import product
>>> d = {'a':[1,2], 'b':[3,4,5]} 
>>> list(product(*d.values()))
[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5)]
>>> [dict(zip(d.keys(), combo)) for combo in product(*d.values())]
[{'a': 1, 'b': 3}, {'a': 1, 'b': 4}, {'a': 1, 'b': 5}, {'a': 2, 'b': 3}, {'a': 2, 'b': 4}, {'a': 2, 'b': 5}]
>>> from pprint import pprint
>>> pprint(_)
[{'a': 1, 'b': 3},
 {'a': 1, 'b': 4},
 {'a': 1, 'b': 5},
 {'a': 2, 'b': 3},
 {'a': 2, 'b': 4},
 {'a': 2, 'b': 5}]

【讨论】:

  • 可能值得展示product(*d.values()) 的中间步骤,以便更清楚地了解其工作原理。
  • 嗯。我打算以this 的身份结束,但你的解释更清楚,这个问题的标题更好。
  • @DSM:在另一个方向either,作为一个骗子接近似乎不太公平。关闭这个作为一个骗子对我来说很好。
【解决方案2】:

你也可以试试这个:

>>> dt={'a':[1,2], 'b':[3,4,5]} 
>>> [{'a':i,'b':j} for i in dt['a'] for j in dt['b']]
[{'a': 1, 'b': 3}, {'a': 1, 'b': 4}, {'a': 1, 'b': 5}, {'a': 2, 'b': 3}, {'a': 2, 'b': 4}, {'a': 2, 'b': 5}]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 1970-01-01
    • 2021-05-23
    相关资源
    最近更新 更多