Schleife durch die Liste der Wörterbücher
habe ich eine Liste von Wörterbüchern. es gibt mehrere Punkte in der Liste, einige sind mehrere. Wenn es mehrere Eintrag möchte ich den Durchschnitt berechnen der x-und der y, die mit diesem Punkt. Mein problem ist, dass ich nicht weiß, wie eine Schleife durch die Liste der Wörterbücher zu vergleichen, die ids der Punkte!
wenn ich so etwas wie, dass:
for i in list:
for j in list:
if i['id'] == j['id']:
point = getPoint(i['geom'])
....
sorry, die Formatierung ist ein bisschen tricky... die zweite Schleife innerhalb der ersten...
ich denke, es vergleicht den ersten Eintrag der Liste, also ist es das gleiche... also muss ich erst in der zweiten Schleife mit dem zweiten Eintrag, aber ich kann das nicht mit i-1, weil ich das Loch Wörterbuch...
Jemand eine Idee?
vielen Dank im Voraus!
for j in range(1, len(NEWPoint)):
if i['gid']==j['gid']:
allsamePoints.append(j)
for k in allsamePoints:
for l in range(1, len(allsamePoints)):
if k['gid']==l['gid']:
Point1 = k['geom']
Point2=l['geom']
X=(Point1.x()+Point2.x())/2
Y=(Point1.y()+Point2.y())/2
AVPoint = QgsPoint(X, Y)
NEWReturnList.append({'gid': j['gid'], 'geom': AVPoint})
del l
for m in NEWReturnList:
for n in range(1, len(NEWReturnList)):
if m['gid']==n['gid']:
Point1 = m['geom']
Point2=n['geom']
X=(Point1.x()+Point2.x())/2
Y=(Point1.y()+Point2.y())/2
AVPoint = QgsPoint(X, Y)
NEWReturnList.append({'gid': j['gid'], 'geom': AVPoint})
del n
else:
pass
ok, denke ich... im moment ist das eher verwirrend :)...
- Welche Sprache verwenden Sie?
- ich bin mit python
- Was soll passieren, wenn drei oder mehr Elemente haben den gleichen
'id'
? Möchten Sie berechnen den Durchschnitt von jedem paar von Elementen? Oder möchten Sie die cluster alle Elemente mit der gleichen'id'
und nehmen den Durchschnitt der cluster? - Noch nicht klar. Sie geben Beispiel für die Eingabe und erwartete Ausgabe?
- Warum nehmen Sie die i-1? Sie noch eine Schleife durch alle möglichen übereinstimmungen.
- ok, die Eingabe sind die Punkte mit den ids. Sie werden auf verschiedene Arten ermittelt, so gibt es mehrere Einträge. Das Ergebnis sollte sein, dass ich einen Punkt in einer Liste, die das Ergebnis der Durchschnittsberechnung. ich habe nicht eine gute Lösung für die, die im moment... ich wird kopieren Sie einige code, einen moment... aber: es sieht sehr verwirrend im moment!
- Bitte verwenden Sie nicht
list
wie ein Variablenname. - Es ist auch hilfreich, nach einem Beispiel, wie Ihre Daten Aussehen, sowie ein Beispiel, was Sie aus ihm werden soll. Viele Male haben wir gehen auf der Suche für die richtige Antwort auf die falsche Frage. Das beste, was zu tun ist, sagen, "Dies ist, was ich habe... Das ist was ich will... Das ist, was ich Tue...". Es dauert ein bisschen länger zu schreiben, aber es zwingt Sie zum nachdenken über Ihren Algorithmus, und es bietet uns viel mehr Flexibilität in, wie wir die Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit wäre die änderung der Art, speichern Sie Ihre Punkte, weil wie du schon gemerkt, es ist schwer zu bekommen, was Sie wollen aus ihm heraus.
Einen viel mehr nützliche Struktur wäre ein dict, wo die
id
maps, um eine Liste der Punkte:defaultdict(list)
verwendet die eingebautelist
weshalb sollten Sie nie verwendenlist
für den Namen einer Variablendict["spam"] = "ham"
), aber dies ist nicht die einzige Sache, die Sie tun können. In diesem Fall THC4k ist die Zuordnung einer Zeichenfolge (dieid
Punkt), um eine Liste von Punkten, mit denenid
s. Diecollections.defaultdict
bedeutet, dass eine Zeichenfolge, die wir noch nicht verarbeitet, noch Karten zu[]
.Ich bin mir nicht ganz sicher, was Sie tun wollen, aber ich denke, die Liste filtern Ihnen helfen würde. Gibt es built-in Funktion
filter
, die durchläuft eine Sequenz und für jedes Element ruft benutzerdefinierte Funktion, um zu bestimmen, ob das Element in der resultierenden Liste steht oder nicht.Zum Beispiel:
So, dass eine Liste der Wörterbücher, die herausfiltern alle Wörterbücher mit einem bestimmten Eintrag, der gleich einem gegebenen Wert, die man tun könnte etwas wie diese:
Mit dieser Funktion, um alle Wörterbücher mit den "id" - Eintrag gleich 2, die Sie tun können:
Mit dieser, deiner main-Schleife könnte wie folgt Aussehen:
Ich hoffe, dass ich dich richtig verstanden habe, und dass dies für Sie hilfreich.