Декартово произведение, дающее словарь
У меня есть следующие списки:
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))
У меня есть все необходимые комбинации, но это просто список списка, а не список словаря. Я не знаю, есть ли прямой и пифонический способ сделать это!1 ответ:
Запишите свои значения с помощью клавиш:
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}]