Python将Dict[String,List[String]]拆分为List[Dict[String,String]]并保留每个键

2024-05-20 00:05:20 发布

您现在位置:Python中文网/ 问答频道 /正文

如果这是另一个问题的重复,我很抱歉。我已经找过了,但找不到和这个差不多的东西。你知道吗

我需要转换字典:

{'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把以上的钥匙,但我事先不知道他们的名字。你知道吗

我正在寻找一种更优雅的方法来解决这个问题。你知道吗


Tags: inidfor字典keysallzipitem
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()) ]

编辑:这只回答问题的原始措辞。你知道吗

产品是您的朋友:

from itertools import product

d = {'id': ['001', '002', '003'], 'tag1': ['val1']}
[ {'id':id, 'tag1': tag1 } for id,tag1 in product(d['id'],d['tag1']) ]

相关问题 更多 >