【问题标题】:How to transform a dictionary of strings to lists to a list of dictionaries?如何将字符串字典转换为列表到字典列表?
【发布时间】:2012-07-10 22:43:29
【问题描述】:

如何将字符串字典转换为列表到将字符串映射到这些列表中的值的字典列表?比如下面这个字典

{'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'},]

【问题讨论】:

  • 如果a 有两个值而b 有三个值会怎样?最后一个值是否重复?值是否循环?
  • @Lattyware:我已经更新了示例,使其更加清晰。

标签: python combinations itertools


【解决方案1】:

您在这里想要的主要是值的乘积,然后重新创建字典。我们实际上可以在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() 内置函数来制作字典。这一切都在列表推导中,以便快速制作列表。

【讨论】:

  • 产品功能是itertools.product功能吗?
  • @ZameerManji 是的,抱歉,我只是在编辑以使其更清晰。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-12
  • 2014-05-23
  • 2019-05-29
  • 1970-01-01
相关资源
最近更新 更多