笛卡尔积给出字典 [英] Cartesian product giving a dictionary
本文介绍了笛卡尔积给出字典的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下列表:
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))
我具有所有需要的组合,但这只是列表的列表,而不是字典的列表.我不知道是否有直接的,Python式的方法!
I have all needed combinations but this is simply a list of list and not a list of dictionary. I don't know if there is a direct and pythonic way to do it!
推荐答案
使用以下键压缩您的值:
Zip your values with the keys:
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}]
这篇关于笛卡尔积给出字典的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文