webentwicklung-frage-antwort-db.com.de

Konvertieren Sie Liste in eine Liste von Tupeln Python

Ich bin ein Neuling in Python und muss eine Liste in ein Wörterbuch umwandeln. Ich weiß, dass wir eine Liste von Tupeln in ein Wörterbuch konvertieren können. 

Dies ist die Eingabeliste: 

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

und ich möchte diese Liste in eine Liste von Tupeln (ODER in ein Wörterbuch) wie folgt konvertieren:

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

Wie können wir das leicht Python machen?

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

Sie möchten drei Elemente gleichzeitig gruppieren?

>>> Zip(it, it, it)

Sie möchten N Artikel auf einmal gruppieren?

# 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

Versuchen Sie es mit der Gruppierungsgruppe:

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

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

Die Links-nach-Rechts-Auswertungsreihenfolge der Iterablen ist garantiert .. _. Dies ermöglicht ein Idiom zum Clustering einer Datenreihe in n-länge Gruppen mit zip (* [iter (s)] * n).

Listen Sie mit Zip direkt ein Wörterbuch auf, um aufeinanderfolgende gerade und ungerade Elemente zu paaren:

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

oder, da Sie mit der Tuple -> Diktierrichtung vertraut sind:

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

sogar:

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

Schneiden verwenden?

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

Versuche dies ,

>>> 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

Mit dem folgenden Code wird sowohl die gerade als auch die ungerade Liste berücksichtigt:

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