Конвертировать список в список кортежей Python

Я новичок в Python и нужно преобразовать список в словарь. Я знаю, что мы можем преобразовать список кортежей в словарь.

Это список ввода:

L = [1,term1, 3, term2, x, term3,... z, termN]

и я хочу преобразовать этот список в список кортежей (ИЛИ в словарь) следующим образом:

[(1, term1), (3, term2), (x, term3), ...(z, termN)]

Как мы можем сделать это легко Python?

7 ответов

Решение
>>> L = [1, "term1", 3, "term2", 4, "term3", 5, "termN"]
# Create an iterator
>>> it = iter(L)
# zip the iterator with itself
>>> zip(it, it)
[(1, 'term1'), (3, 'term2'), (4, 'term3'), (5, 'termN')]

Вы хотите сгруппировать три элемента одновременно?

>>> zip(it, it, it)

Вы хотите сгруппировать N элементов одновременно?

# Create N copies of the same iterator
it = [iter(L)] * N
# Unpack the copies of the iterator, and pass them as parameters to zip
>>> zip(*it)

Попробуйте с групповой кластеризацией идиома:

zip(*[iter(L)]*2)

С https://docs.python.org/2/library/functions.html:

Порядок вычисления итераций слева направо гарантирован. Это делает возможным объединение ряда данных в группы n-длины с использованием zip(*[iter(s)]*n).

Перечислите прямо в словарь, используя zip соединить последовательные четные и нечетные элементы:

m = [ 1, 2, 3, 4, 5, 6, 7, 8 ] 
d = { x : y for x, y in zip(m[::2], m[1::2]) }

или, поскольку вы знакомы с направлением кортежа -> dict:

d = dict(t for t in zip(m[::2], m[1::2]))

четное:

d = dict(zip(m[::2], m[1::2]))

Используя нарезку?

L = [1, "term1", 2, "term2", 3, "term3"]
L = zip(L[::2], L[1::2])

print L

Попробуй это,

>>> L = [1, "term1", 3, "term2", 4, "term3", 5, "termN"]
>>> it = iter(L)
>>> [(x, next(it)) for x in it ]
[(1, 'term1'), (3, 'term2'), (4, 'term3'), (5, 'termN')]
>>> 

ИЛИ ЖЕ

>>> L = [1, "term1", 3, "term2", 4, "term3", 5, "termN"]
>>> [i for i in zip(*[iter(L)]*2)]
[(1, 'term1'), (3, 'term2'), (4, 'term3'), (5, 'termN')]

ИЛИ ЖЕ

>>> L = [1, "term1", 3, "term2", 4, "term3", 5, "termN"]
>>> map(None,*[iter(L)]*2)
[(1, 'term1'), (3, 'term2'), (4, 'term3'), (5, 'termN')]
>>> 
[(L[i], L[i+1]) for i in xrange(0, len(L), 2)]

Приведенный ниже код будет заботиться как о четном, так и нечетном списке:

[set(L[i:i+2]) for i in range(0, len(L),2)]
Другие вопросы по тегам