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?
>>> 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)
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]))
En utilisant le découpage?
L = [1, "term1", 2, "term2", 3, "term3"]
L = Zip(L[::2], L[1::2])
print L
[(L[i], L[i+1]) for i in xrange(0, len(L), 2)]
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')]
>>>
>>> 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')]
>>>
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)]