效果就是把类似:
my_dict = {
"config_1": [1, 2, 3, 4],
"config_2": "test",
"config_3": 4,
"config_4": ["a", 'b'],
"config_5": ["a"]
}
这样的数据拆解为:
{'config_2': 'test', 'config_3': 4, 'config_1': 1, 'config_4': 'a', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 1, 'config_4': 'b', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 2, 'config_4': 'a', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 2, 'config_4': 'b', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 3, 'config_4': 'a', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 3, 'config_4': 'b', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 4, 'config_4': 'a', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 4, 'config_4': 'b', 'config_5': 'a'}
工具函数
这里使用一个工具函数:
from copy import deepcopy
from itertools import product
def transform_dict(dict_data):
"""拆解含list的字典值,将值全排列"""
default_dict = {}
list_type_key = []
list_type_value = []
return_list = []
for _k, _v in dict_data.items():
if type(_v) == list:
list_type_key.append(_k)
list_type_value.append(dict_data[_k])
else:
default_dict[_k] = _v
# 开始组合全排列
for _combine_data in product(*list_type_value):
for _list_i, _list_key in enumerate(list_type_key):
default_dict[_list_key] = _combine_data[_list_i]
return_list.append(deepcopy(default_dict))
return return_list
使用示例
from copy import deepcopy
from itertools import product
def transform_dict(dict_data):
"""拆解含list的字典值,将值全排列"""
default_dict = {}
list_type_key = []
list_type_value = []
return_list = []
for _k, _v in dict_data.items():
if type(_v) == list:
list_type_key.append(_k)
list_type_value.append(dict_data[_k])
else:
default_dict[_k] = _v
# 开始组合全排列
for _combine_data in product(*list_type_value):
for _list_i, _list_key in enumerate(list_type_key):
default_dict[_list_key] = _combine_data[_list_i]
return_list.append(deepcopy(default_dict))
return return_list
def main():
my_dict = {
"config_1": [1, 2, 3, 4],
"config_2": "test",
"config_3": 4,
"config_4": ["a", 'b'],
"config_5": ["a"]
}
trans_list = transform_dict(my_dict)
[print(_) for _ in trans_list]
if __name__ == '__main__':
main()
效果如下:
{'config_2': 'test', 'config_3': 4, 'config_1': 1, 'config_4': 'a', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 1, 'config_4': 'b', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 2, 'config_4': 'a', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 2, 'config_4': 'b', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 3, 'config_4': 'a', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 3, 'config_4': 'b', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 4, 'config_4': 'a', 'config_5': 'a'}
{'config_2': 'test', 'config_3': 4, 'config_1': 4, 'config_4': 'b', 'config_5': 'a'}