python - 给出字典的笛卡尔积

标签 python dictionary python-itertools

<分区>

我有以下列表:

brand=["Audi","Mercedes"]
speed=[130,150]
model=["sport","family"]

我想获得等同于:

ll=[]
ll.append({'brand':'mercedes', 'speed':130, 'model':'family'})
ll.append({'brand':'mercedes', 'speed':130, 'model':'sport'})
ll.append({'brand':'audi', 'speed':130, 'model':'family'})
ll.append({'brand':'audi', 'speed':130, 'model':'sport'})
ll.append({'brand':'mercedes', 'speed':150, 'model':'family'})
ll.append({'brand':'mercedes', 'speed':150, 'model':'sport'})
ll.append({'brand':'audi', 'speed':150, 'model':'family'})
ll.append({'brand':'audi', 'speed':150, 'model':'sport'})

我目前做的:

from itertools import product
ll=list(product(speed, model, brand))

我有所有需要的组合,但这只是一个列表列表,而不是字典列表。我不知道是否有直接的 pythonic 方式来做到这一点!

最佳答案

用键压缩你的值:

keys = 'brand', 'speed', 'model'

ll = [dict(zip(keys, combo)) for combo in product(brand, speed, model)]

演示:

>>> from itertools import product
>>> from pprint import pprint
>>> brand = ["Audi", "Mercedes"]
>>> speed = [130, 150]
>>> model = ["sport", "family"]
>>> keys = 'brand', 'speed', 'model'
>>> [dict(zip(keys, combo)) for combo in product(brand, speed, model)]
[{'speed': 130, 'brand': 'Audi', 'model': 'sport'}, {'speed': 130, 'brand': 'Audi', 'model': 'family'}, {'speed': 150, 'brand': 'Audi', 'model': 'sport'}, {'speed': 150, 'brand': 'Audi', 'model': 'family'}, {'speed': 130, 'brand': 'Mercedes', 'model': 'sport'}, {'speed': 130, 'brand': 'Mercedes', 'model': 'family'}, {'speed': 150, 'brand': 'Mercedes', 'model': 'sport'}, {'speed': 150, 'brand': 'Mercedes', 'model': 'family'}]
>>> pprint(_)
[{'brand': 'Audi', 'model': 'sport', 'speed': 130},
 {'brand': 'Audi', 'model': 'family', 'speed': 130},
 {'brand': 'Audi', 'model': 'sport', 'speed': 150},
 {'brand': 'Audi', 'model': 'family', 'speed': 150},
 {'brand': 'Mercedes', 'model': 'sport', 'speed': 130},
 {'brand': 'Mercedes', 'model': 'family', 'speed': 130},
 {'brand': 'Mercedes', 'model': 'sport', 'speed': 150},
 {'brand': 'Mercedes', 'model': 'family', 'speed': 150}]

关于python - 给出字典的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25362355/

相关文章:

python - 如何在 iPython 中获取最后赋值的变量的值?

python - 让函数相互交互的正确方法

python - __del__ 真的是析构函数吗?

python - 许多巨大的 csv 文件的高效合并

python - 从列表生成邻接矩阵,其中邻接表示元素相等

python - 类型错误 : fit_transform() missing 1 required positional argument: 'raw_documents'

Python - 在列表中选择一个字典,哪个键更接近全局值

python - 按自然顺序对字典键进行排序

python - 有没有更快的方法从字典中获取多个键?

python:如何在不重复项目的情况下制作可迭代产品?