2017-02-15 3 views
0

У меня есть 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}] 

Как я могу это сделать простым способом?

+4

Не могли бы вы опубликовать код, который вы пробовали а также уточнить свою цель? Переполнение стека не просто для вас. –

+1

Я думаю, у вас есть свой ответ, поэтому я просто укажу, что использование 'dict', который является встроенным, как имя переменной не является хорошей практикой и может вызвать проблемы в другом месте вашего кода. – roganjosh

ответ

3

Вот один из способов сделать это, используя список понимание:

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'}] 
-1

Существует пакет называется 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) 
     ) 
    ) 
) 
+4

Ваше форматирование является нетрадиционным и делает этот код почти невозможным для чтения. –

+0

Пожалуйста, по крайней мере, * попробуйте * придерживаться правил стиля Python. В Python понимание почти всегда * лучше, чем эквивалентная «карта» с «лямбдой» с точки зрения удобочитаемости, и, скорее всего, будет работать лучше. Для записи я не сделал ни слова, потому что это добавляет ценное обобщение с «продуктом» ... просто улучшает стиль ... –

+0

благодарит Павла за это. Я много думал о том, как форматировать несколько вложенных карт, и это было самым ясным, что я мог придумать. но я был бы чрезвычайно благодарен, если бы вы могли показать мне лучший способ (просто поместите это в пастебин, если у вас есть 2 минуты для меня) – deeenes

 Смежные вопросы

  • Нет связанных вопросов^_^