Ich habe nach einem Rezept/Beispiel gesucht, um eine Liste von Tupeln zu indizieren, ohne eine Modifikation des Dekors, Sortierens, undekorierten Ansatzes vorzunehmen.Gibt es in Python eine Möglichkeit, eine Liste von Containern (Tupel, Listen, Wörterbücher) nach einem Element eines Containers zu indizieren?
Zum Beispiel:
l=[(a,b,c),(x,c,b),(z,c,b),(z,c,d),(a,d,d),(x,d,c) . . .]
Der Ansatz, den ich verwendet haben ist ein Wörterbuch mit defaultdict des zweiten Elements zu bauen
from collections import defaultdict
tdict=defaultdict(int)
for myTuple in l:
tdict[myTuple[1]]+=1
Dann muss ich die zweite nur aus einer Liste erstellen Element im Tupel für jeden Eintrag in der Liste. Zwar gibt es eine Reihe von Möglichkeiten, um dort einen einfachen Ansatz sind ist:
tempList=[myTuple[1] for myTuple in l]
und dann einen Index jedes Elements in TDICT
indexDict=defaultdict(dict)
for key in tdict:
indexDict[key]['index']=tempList.index(key)
Offensichtlich erzeugen bedeutet dies nicht sehr Pythonic scheinen. Ich habe versucht, Beispiele oder Einsichten zu finden, die denken, dass ich in der Lage sein sollte, etwas Magisches zu verwenden, um den Index direkt zu bekommen. Bisher kein Glück.
Hinweis, ich verstehe, dass ich meinen Ansatz ein wenig direkter und nicht generieren kann.
Ausgang könnte ein Wörterbuch mit dem Index
indexDict={'b':{'index':0},'c':{'index':1},'d':{'index':4},. . .}
sein Nach viel von Nadia Antworten Lernen Ich denke, die Antwort ist nein.
Während ihre Antwort funktioniert, denke ich, dass es komplizierter ist als nötig. Ich würde einfach
def build_index(someList):
indexDict={}
for item in enumerate(someList):
if item[1][1] not in indexDict:
indexDict[item[1][1]]=item[0]
return indexDict
Ich bin verwirrt, was Sie versuchen zu tun. Was ist Ihre gewünschte Ausgabe? Dein Code funktioniert nicht ganz - was soll in der Zeile "tdict [myTuple [1]] + = count" stehen? –
Können Sie ein Beispiel für die erwartete Ausgabe oder Struktur angeben? –
Entschuldigung - jedes Mal, wenn ich ein Wörterbuch erstelle, um die Anzahl eines Elements zu erhalten, schreibe ich immer + = count, bevor ich es auf + = 1 korrigiere. Ich habe eine Gehirnzelle. – PyNEwbie