составить список из нескольких отдельных словарей в Python? - PullRequest
0 голосов
/ 08 ноября 2018

Допустим, у меня есть список:

l = [1, 7, 2, 4, 3, 2, 4, 1, 4, 3]

Как сделать цикл, чтобы составить список из нескольких отдельных словарей?

newl = [{1:7}, {2:4}, {3:2}, {4:1}, {4:3}]

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Мой подход состоял бы в том, чтобы инициализировать дикты в пределах понимания списка, которое повторяет как четные, так и нечетные элементы:

 l = [1, 7, 2, 4, 3, 2, 4, 1, 4, 3]

 newl = [{k: v} for k, v in zip(l[::2], l[1::2])]

 #  [{1: 7}, {2: 4}, {3: 2}, {4: 1}, {4: 3}]

Если производительность имеет значение, обратите внимание на комментарий @Netwave: здесь создаются два дополнительных списка, которых можно избежать (см. Их ответ здесь).

0 голосов
/ 08 ноября 2018

Другой эффективный способ - использовать iter:

>>> l = [1, 7, 2, 4, 3, 2, 4, 1, 4, 3]
>>> it = iter(l)
>>> [{x:y} for x,y in zip(it, it)]
[{1: 7}, {2: 4}, {3: 2}, {4: 1}, {4: 3}]

Или используйте itertools.islice для эффективной итерации и без дополнительных затрат памяти:

[{k: v} for k, v in zip(islice(l, 0, None, 2), islice(l, 1, None, 2))]
0 голосов
/ 08 ноября 2018

Вы можете использовать этот список понимания:

>>> [{l[i]:l[i+1]} for i in range(0,len(l),2)]
[{1: 7}, {2: 4}, {3: 2}, {4: 1}, {4: 3}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...