簡體   English   中英

如何在 Python 中使用 Dict 創建多個組合列表

[英]How to Create list of Multiple Combinations using Dict in Python

我正在嘗試在給定數據中形成組合列表

數據 = {“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 = {}

實際 Output:

{'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]}}

預期 Output:

實際 Output +

{'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]} }

完整填寫組合所需的建議。

結果字典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)

我稍微調整了一下以獲得結果。

parsed_keys = []
for i in range(len(data.keys())):
    result = {}
    count = 0
    for key, values in data.items():
        if key not in parsed_keys:
            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)
        if count == 0 and key not in parsed_keys:
            parsed_keys.append(key)
            count += 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM