Поместите несколько списков в качестве значения с одним списком в качестве ключа - PullRequest
2 голосов
/ 08 апреля 2020

У меня есть 3 lists и один string, например:

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

string = 'buy'

Мне нужен список таких словарей:

[{'a':1 , 'b':10 , 'c':'buy'},{'a':2 , 'b':11 , 'c':'buy'},{'a':3 , 'b':14 , 'c':'buy'},...]

Ответы [ 4 ]

3 голосов
/ 08 апреля 2020
result = [ dict(zip(a,[*v, 'buy'])) for v in zip(b,c) ]
2 голосов
/ 08 апреля 2020

Это должно сделать то, что вы ищете:

[{a[0]:vb, a[1]:vc, a[2]:string} for vb, vc in zip(b, c)]

Он производит:

[{'a': 1, 'b': 10, 'c': 'buy'},
 {'a': 2, 'b': 11, 'c': 'buy'},
 {'a': 3, 'b': 14, 'c': 'buy'},
 {'a': 4, 'b': 15, 'c': 'buy'},
 {'a': 5, 'b': 16, 'c': 'buy'}]

Он берет ключи из списка a, и приходит 'buy' от string.

2 голосов
/ 08 апреля 2020

Вы можете просто сжать b и c и использовать их для создания словарей в понимании:

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

[{'a':a, 'b':b, 'c':'buy'} for a, b, in zip(b,c)]

Результат:

[{'a': 1, 'b': 10, 'c': 'buy'},
 {'a': 2, 'b': 11, 'c': 'buy'},
 {'a': 3, 'b': 14, 'c': 'buy'},
 {'a': 4, 'b': 15, 'c': 'buy'},
 {'a': 5, 'b': 16, 'c': 'buy'}]

Если вы хотите включить ключи от a динамически, вы также можете сжать их с помощью чего-нибудь вроде itertools zip_longest, чтобы получить строку c: 1011 *

from itertools import zip_longest

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

[dict(zip_longest(a, tup, fillvalue='buy')) for tup in zip(b,c)]

Тот же результат:

[{'a': 1, 'b': 10, 'c': 'buy'},
 {'a': 2, 'b': 11, 'c': 'buy'},
 {'a': 3, 'b': 14, 'c': 'buy'},
 {'a': 4, 'b': 15, 'c': 'buy'},
 {'a': 5, 'b': 16, 'c': 'buy'}]

Еще один способ - использовать itertools.repeat() для включения строки stati c в сжатый кортеж:

from itertools import repeat

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

[dict(zip(a, tup)) for tup in zip(b,c, repeat('buy'))]
1 голос
/ 08 апреля 2020

Вы можете использовать zip () , понимание списка и понимание словаря для вашей задачи

Попробуйте это:

a = ['a', 'b', 'c']
b = [1, 2, 3, 4, 5]
c = [10, 11, 14, 15, 16]

print([{ a[0]:i, a[1]:j, a[2]:'buy'} for i,j in zip(b,c)])

ИЛИ

print([dict(zip(a, [i, j, "buy"])) for i,j in zip(b,c)])

Выходы:

[{'a': 1, 'b': 10, 'c': 'buy'}, {'a': 2, 'b': 11, 'c': 'buy'}, {'a': 3, 'b': 14, 'c': 'buy'}, {'a': 4, 'b': 15, 'c': 'buy'}, {'a': 5, 'b': 16, 'c': 'buy'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...