У меня есть 2 списка:Объединить 2 списка в Python
x = [a,b]
y = [c,d]
и я хочу, чтобы создать список словаря, как это:
dict = [{ex1:a,ex2:c},{ex1:b,ex2:c},{ex1:a,ex2:d},{ex1:b,ex2:d}]
Как я могу это сделать простым способом?
У меня есть 2 списка:Объединить 2 списка в Python
x = [a,b]
y = [c,d]
и я хочу, чтобы создать список словаря, как это:
dict = [{ex1:a,ex2:c},{ex1:b,ex2:c},{ex1:a,ex2:d},{ex1:b,ex2:d}]
Как я могу это сделать простым способом?
Вот один из способов сделать это, используя список понимание:
lst = [{'ex1': j, 'ex2': i} for i in y for j in x]
Если элементы списка являются строки, вы получите:
print(lst)
# [{'ex2': 'c', 'ex1': 'a'}, {'ex2': 'c', 'ex1': 'b'}, {'ex2': 'd', 'ex1': 'a'}, {'ex2': 'd', 'ex1': 'b'}]
Существует пакет называется itertools
который предоставляет множество способов облегчения такого рода вещей. Я предполагаю, что у вас может быть не только один список, но и в конечном итоге больше, поэтому вы можете поместить их в другой список my_lists
, возьмите их продукт, а остальная часть просто сделает его dict
в нужном формате, то есть с такими ключами, как ex1
,
Edit:
Здесь же с пониманием списка:
[dict(('ex%u' % (i[0] + 1), i[1]) for i in enumerate(co))
for co in itertools.product(*my_lists)]
И было так с картой:
import itertools
x = ['a', 'b']
y = ['c', 'd']
my_lists = [x, y]
list_of_dicts = (
list(
map(
lambda co:
dict(
map(
lambda i:
('ex%u' % (i[0] + 1), i[1]),
enumerate(co)
)
),
itertools.product(*my_lists)
)
)
)
Ваше форматирование является нетрадиционным и делает этот код почти невозможным для чтения. –
Пожалуйста, по крайней мере, * попробуйте * придерживаться правил стиля Python. В Python понимание почти всегда * лучше, чем эквивалентная «карта» с «лямбдой» с точки зрения удобочитаемости, и, скорее всего, будет работать лучше. Для записи я не сделал ни слова, потому что это добавляет ценное обобщение с «продуктом» ... просто улучшает стиль ... –
благодарит Павла за это. Я много думал о том, как форматировать несколько вложенных карт, и это было самым ясным, что я мог придумать. но я был бы чрезвычайно благодарен, если бы вы могли показать мне лучший способ (просто поместите это в пастебин, если у вас есть 2 минуты для меня) – deeenes
Не могли бы вы опубликовать код, который вы пробовали а также уточнить свою цель? Переполнение стека не просто для вас. –
Я думаю, у вас есть свой ответ, поэтому я просто укажу, что использование 'dict', который является встроенным, как имя переменной не является хорошей практикой и может вызвать проблемы в другом месте вашего кода. – roganjosh