python - Python 字典操作
问题描述
我正在解决一个问题,我想将 python dict 与列表作为值如下所示
[
{'a': [1,2,3,4], 'b':[0,9,8], 'c': 'row1'},
{'x': [1,2,3,4], 'y':[0,9,8], 'z': 'row2'}
]
类似于
[
{'a':1, 'b': 0, 'c': 'row1'},
{'a':1, 'b': 9, 'c': 'row1'},
{'a':1, 'b': 8, 'c': 'row1'},
{'a':2, 'b': 0, 'c': 'row1'},
{'a':2, 'b': 9, 'c': 'row1'},
{'a':2, 'b': 8, 'c': 'row1'},
{'a':3, 'b': 0, 'c': 'row1'},
{'a':3, 'b': 9, 'c': 'row1'},
{'a':3, 'b': 8, 'c': 'row1'},
{'a':4, 'b': 0, 'c': 'row1'},
{'a':4, 'b': 9, 'c': 'row1'},
{'a':4, 'b': 8, 'c': 'row1'},
{'x':1, 'y': 0, 'z': 'row2'},
{'x':1, 'y': 9, 'z': 'row2'},
{'x':1, 'y': 8, 'z': 'row2'},
{'x':2, 'y': 0, 'z': 'row2'},
{'x':2, 'y': 9, 'z': 'row2'},
{'x':2, 'y': 8, 'z': 'row2'},
{'x':3, 'y': 0, 'z': 'row2'},
{'x':3, 'y': 9, 'z': 'row2'},
{'x':3, 'y': 8, 'z': 'row2'},
{'x':4, 'y': 0, 'z': 'row2'},
{'x':4, 'y': 9, 'z': 'row2'},
{'x':4, 'y': 8, 'z': 'row2'},
]
我曾尝试使用 pandas 来压平 dict,但没有什么建设性的结果。有点卡住试图找出替代方案
解决方案
您可以使用itertools.product
在 dict 项目上生成笛卡尔积(给定变量中的输入列表l
):
from itertools import product
[dict(p) for d in l for p in product(*([(k, i) for i in v] if isinstance(v, list) else [(k, v)] for k, v in d.items()))]
这将返回:
[{'a': 1, 'b': 0, 'c': 'row1'},
{'a': 1, 'b': 9, 'c': 'row1'},
{'a': 1, 'b': 8, 'c': 'row1'},
{'a': 2, 'b': 0, 'c': 'row1'},
{'a': 2, 'b': 9, 'c': 'row1'},
{'a': 2, 'b': 8, 'c': 'row1'},
{'a': 3, 'b': 0, 'c': 'row1'},
{'a': 3, 'b': 9, 'c': 'row1'},
{'a': 3, 'b': 8, 'c': 'row1'},
{'a': 4, 'b': 0, 'c': 'row1'},
{'a': 4, 'b': 9, 'c': 'row1'},
{'a': 4, 'b': 8, 'c': 'row1'},
{'x': 1, 'y': 0, 'z': 'row2'},
{'x': 1, 'y': 9, 'z': 'row2'},
{'x': 1, 'y': 8, 'z': 'row2'},
{'x': 2, 'y': 0, 'z': 'row2'},
{'x': 2, 'y': 9, 'z': 'row2'},
{'x': 2, 'y': 8, 'z': 'row2'},
{'x': 3, 'y': 0, 'z': 'row2'},
{'x': 3, 'y': 9, 'z': 'row2'},
{'x': 3, 'y': 8, 'z': 'row2'},
{'x': 4, 'y': 0, 'z': 'row2'},
{'x': 4, 'y': 9, 'z': 'row2'},
{'x': 4, 'y': 8, 'z': 'row2'}]
推荐阅读
- java - 来自变量的Dockerfile Spring Boot属性不起作用
- mongodb - Docker 无法运行入口点
- java - 如何在 JAVA 中将新属性添加到 XML 字符串中?条件:基于父密钥,如果我们需要进行解析或 SAX,我只能使用 JAVA 内部 api
- python - 如何在 Tensorflow 中删除张量中的重复值?
- swift - 快速将 UIImage 更改为数组或矩阵
- javascript - 为什么这个链接在粘贴到 url 栏中时有效,但在单击时无效?
- asp.net-core - datetimepicker 在 asp.net 核心中不起作用
- javascript - 为什么 Catch 不捕获错误?
- mysql - SQL Redshift 查询以选择每个组中的前 x 个日期
- matlab - Matlabs“splitapply”用于具有多个参数的函数