我在config.json中有以下数据
{
"data1": [7, 8],
"data2": [2015, 2016],
"data3": [5, 10],
}它有3个列表,长度为2,但它可以有多个列表,具有n个长度。我必须读取这些数据,然后创建一个列表,其中应该有所有的值,就像set一样。因此,输出应该如下所示:
[
[7, 2015, 5],
[7, 2015, 10],
[7, 2016, 5],
[7, 2016, 10],
[8, 2015, 5],
[8, 2015, 10],
[8, 2016, 5],
[8, 2016, 10]
]
json_data = open("config.json")
config = json.load(json_data)
json_data.close()
data_list = []
for be in config["data1"]:
for eof in config["data2"]:
for bd in config["data3"]:
data_list.append(bd)但是,我无法理解如何修改数据,使其具有上述输出。有人能给我点建议吗。请帮帮忙。谢谢
发布于 2021-10-04 11:59:40
这里有一些关于客人回答的信息,因为你似乎很难理解它。
json_data = open("config.json")
config = json.load(json_data)
json_data.close()
cproduct = list(itertools.product(*config.values()))product函数将给您笛卡尔积,这正是您所需要的:来自不同集合的所有可能的元素组合。我们基本上使用它作为product(set_1, set_2, ..., set_n)。
在这里,set_1应该是用"data1"键存储的列表,set_2应该存储在"data2"中,等等。这样你就可以写it.product(config['data1'], config['data2'], config['data3'])了。
但是,我们如何在不更改代码的情况下处理json中的新密钥呢?
要做到这一点,guest_a依赖于两件事:
config.values(),它返回每个值的列表,因此在您的示例中,一个包含json中定义的所有列表的列表。这样,如果在json文件中添加一个新的"data4"密钥,就会得到新的列表.*运算符,它允许我们使用任何可迭代的参数列表.因此,基本上,it.product(*config.values())等同于it.product(config["data1"], ..., config["data_n"]),但要灵活得多。
发布于 2021-10-04 11:39:03
您可以使用itertools.product
list(it.product(*data.values()))发布于 2021-10-04 11:40:35
使用itertools.product,它给出了一系列可迭代性的笛卡尔积:
from itertools import product
data = {'data1': [7, 8], 'data2': [2015, 2016], 'data3': [5, 10]}
cprod = product(*data.values())
for cp in cprod:
print(cprod)
(7, 2015, 5)
(7, 2015, 10)
(7, 2016, 5)
(7, 2016, 10)
(8, 2015, 5)
(8, 2015, 10)
(8, 2016, 5)
(8, 2016, 10)https://stackoverflow.com/questions/69435242
复制相似问题