首页 > 解决方案 > 如何在 Python 中使用 Dict 创建多个组合列表

问题描述

我正在尝试在给定数据中形成组合列表

数据 = {“a”:[1,2,3],“b”:[11,12,13],“c”:[31,32,33]}

到目前为止,我可以创建一个组合列表,现在我有点卡在这里。如何添加列表中的其他项目。

from itertools import combinations 
import datetime 
data = { "a": [1,2,3], "b":[11,12,13], "c":[31,32,33]}
for key, values in data.items():
    result = {}
    for iterate in range(len(values)):
        result["timegenerated"] = { int(datetime.datetime.now().timestamp()) } 
        comb = combinations(values,iterate+1)
        for i in list(comb):
            val_list = list(i)
            result[key] = { "in" :val_list }
            print(result)
        result = {}

实际输出:

{'datetime': {1569988851}, 'a': {'in': [1]}}
{'datetime': {1569988851}, 'a': {'in': [2]}}
{'datetime': {1569988851}, 'a': {'in': [3]}}
{'datetime': {1569988851}, 'a': {'in': [1, 2]}}
{'datetime': {1569988851}, 'a': {'in': [1, 3]}}
{'datetime': {1569988851}, 'a': {'in': [2, 3]}}
{'datetime': {1569988851}, 'a': {'in': [1, 2, 3]}}
{'datetime': {1569988851}, 'b': {'in': [11]}}
.
.
{'datetime': {1569988851}, 'c': {'in': [32, 33]}}
{'datetime': {1569988851}, 'c': {'in': [31, 32, 33]}}

预期输出:

实际输出 +

{'datetime': {1569988851}, 'a': {'in': [1]}}
.
.

{'datetime': {1569988851}, 'a': {'in': [1]},'b': {'in': [11]} }
{'datetime': {1569988851}, 'a': {'in': [1]},'b': {'in': [12]} }
{'datetime': {1569988851}, 'a': {'in': [1]},'b': {'in': [13]} }
{'datetime': {1569988851}, 'a': {'in': [1]},'b': {'in': [11,12]} }
.
.
{'datetime': {1569988851}, 'a': {'in': [1,2,3]},'b': {'in': [11,12,13]},'c': {'in': [31,32,33]} }
.
.
{'datetime': {1569988851}, 'b': {'in': [11]} }
{'datetime': {1569988851}, 'b': {'in': [12]} }

.
.
{'datetime': {1569988851}, 'b': {'in': [11]},'c': {'in': [31]} }
{'datetime': {1569988851}, 'b': {'in': [11]},'c': {'in': [31,32]} }

.
.

{'datetime': {1569988851}, 'b': {'in': [11,12,13]},'c': {'in': [31,32,33]} }

.
.

{'datetime': {1569988851}, 'c': {'in': [31]} }
{'datetime': {1569988851}, 'c': {'in': [32]} }
.
.

{'datetime': {1569988851}, 'c': {'in': [31,32]} }

完整填写组合所需的建议。

标签: pythonpython-3.x

解决方案


结果字典在每次迭代时重新初始化for key, values in data.items():

因此,将结果的初始化移到循环之外。

from itertools import combinations 
import datetime 
data = { "a": [1,2,3], "b":[11,12,13], "c":[31,32,33]}
result = {}
final = {}
for key, values in data.items():
    for iterate in range(len(values)):
        result["timegenerated"] = { int(datetime.datetime.now().timestamp()) } 
        comb = combinations(values,iterate+1)
        for i in list(comb):
            val_list = list(i)
            result[key] = { "in" :val_list }
print(result)

推荐阅读