python - 如何在 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]} }
完整填写组合所需的建议。
解决方案
结果字典在每次迭代时重新初始化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)
推荐阅读
- android - 如何在底部导航视图中放置选项卡式布局?
- c# - 访问令牌中不包含 Azure AD v2 角色
- java - 如何使用 JPA EntityManager 选择多个列,包括外部实体
- javascript - 根据标签转发给不同的用户 - Gmail Apps 脚本
- visual-studio - 为什么我不能使用 sourcelink 调试我的 nuget 包?
- javascript - 在 typescript 中扩展 react-select 接口属性
- ios - 金属在运行时动态生成 2D 纹理?
- raku - 尝试为 markdown 定义语法时出现 raku 语法问题
- numpy - 如何使用 Numpy 高效地执行最近邻插值
- git - gitlab CI if \ else 基于“git status”的返回