web-dev-qa-db-fra.com

Convertir la liste en une liste de tuples python

Je suis un débutant en python et j'ai besoin de convertir une liste en dictionnaire. Je sais que nous pouvons convertir une liste de tuples en dictionnaire. 

Ceci est la liste d'entrée: 

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

et je veux convertir cette liste en une liste de tuples (ou en un dictionnaire) comme ceci:

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

Comment pouvons-nous faire cela facilement en python?

40
user3401408
>>> 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')]

Vous souhaitez regrouper trois éléments à la fois?

>>> Zip(it, it, it)

Vous souhaitez regrouper N éléments à la fois?

# 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)
80
thefourtheye

Essayez avec l'idiome de regroupement de groupe:

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

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

L'ordre d'évaluation des itérables de gauche à droite est garanti . Cela rend possible un idiome pour regrouper une série de données dans groupes de longueur n utilisant Zip (* [iter (s)] * n).

Listez directement dans un dictionnaire en utilisant Zip pour apparier des éléments pairs et impairs consécutifs:

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

ou, puisque vous connaissez la direction Tuple -> dict:

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

même:

d = dict(Zip(m[::2], m[1::2]))
7
perreal

En utilisant le découpage?

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

print L
5
velis
[(L[i], L[i+1]) for i in xrange(0, len(L), 2)]
3
Xing Fei

Essaye ça ,

>>> 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')]
>>> 

OR

>>> 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')]

OR

>>> L = [1, "term1", 3, "term2", 4, "term3", 5, "termN"]
>>> map(None,*[iter(L)]*2)
[(1, 'term1'), (3, 'term2'), (4, 'term3'), (5, 'termN')]
>>> 
2
Nishant Nawarkhede

Le code ci-dessous prend en charge les listes de tailles paires et impaires:

[set(L[i:i+2]) for i in range(0, len(L),2)]
1
Sahil Chhabra