很抱歉,如果它与另一个问题重复。我一直在寻找它,但找不到与此相近的任何东西。
我需要转换字典:
{'id': ['001', '002', '003'], 'tag1': ['val1']}
到词典列表:
[{'id': '001', 'tag1': 'val1'}, {'id': '002', 'tag1': 'val1'}, {'id': '003', 'tag1': 'val1'}]
请注意,本词典仅作为示例,我无法假设词典中的数字或键的名称。
我已经使用以下代码解决了我的问题:
pfilter = dict()
pfilter["id"] = ["001", "002", "003"]
pfilter["tag1"] = ["val1"]
print(pfilter)
all_values = list(itertools.product(*pfilter.values()))
all_keys = [pfilter.keys()]*len(all_values)
all_dict = [zip(keys, values) for keys, values in zip(all_keys, all_values)]
all_dict = [{k:v for k, v in item} for item in all_dict]
print(all_dict)
我可以拥有2个以上的键,而且我不知道它们的名字。
我正在寻找一种解决此问题的更优雅的方法。
答案 0 :(得分:2)
编辑:这仅回答OP的原始措辞。
产品是您的朋友:
from itertools import product
d = {'id': ['001', '002', '003'], 'tag1': ['val1']}
[ {'id':id, 'tag1': tag1 } for id,tag1 in product(d['id'],d['tag1']) ]
答案 1 :(得分:2)
基于我哥哥的回答,您可以通过以下方式获得通用解决方案:
from itertools import product
d = {'id': ['001', '002', '003'], 'tag1': ['val1'], 'other_key': ['o1','o2']}
all_dict = [dict([(k,v) for k,v in zip(d.keys(), item)]) for item in product(*d.values()) ]