如何将一个字符串字典转换为字典列表?

3
我可以帮您将字符串字典转换为列表,并将其转换为字符串到这些列表中的值映射的字典列表。例如,如下所示的字典:
{'a': [1,2],
 'b': ['x', 'y', 'z']}

将会转换为以下列表:
[{'a': 1, 'b': 'x'}, {'a': 1, 'b': 'y'}, {'a': 1, 'b': 'z'},
 {'a': 2, 'b': 'x'}, {'a': 2, 'b': 'y'}, {'a': 2, 'b': 'z'},]

2
如果a有两个值,而b有三个值会发生什么?最后的值会被重复吗?这些值会循环吗? - Gareth Latty
@Lattyware:我已经更新了示例,使其更加清晰。 - Zameer Manji
1个回答

8

这里的主要目的是计算数值的乘积,并重新创建字典。我们可以借助itertools.product()轻松实现此目的:

>>> from itertools import product
>>> test = {'a': [1, 2], 'b': ['x', 'y', 'z']}
>>> [dict(zip(test.keys(), part)) for part in product(*test.values())]
[{'a': 1, 'b': 'x'}, {'a': 1, 'b': 'y'}, {'a': 1, 'b': 'z'}, 
 {'a': 2, 'b': 'x'}, {'a': 2, 'b': 'y'}, {'a': 2, 'b': 'z'}]

我们所做的是将字典中所有列表的产品制作出来,然后将每个生成的对(或在字典中有更多项的情况下,任意长的元组)与字典中的键进行压缩。然后我们通过dict()内置函数将其传递进去,以制作一个字典。这一切都在列表解析中完成,以快速制作列表。

1
产品函数是 itertools.product 函数吗? - Zameer Manji
@ZameerManji 是的,抱歉,我只是在编辑以使其更清晰。 - Gareth Latty

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接