-
python3 suchen in Listen
Hi,
ich habe zwei Listen die ein Datenbankexport sind
Code:
[(1, 0, 'elasticsearch', 'clientfuu-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-live-]YYYY.MM.DD', False, '', '', True, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-qa', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-qa-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-dev', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-dev-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-ALL', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-*-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-dev', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-dev-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-qa', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-qa-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-live-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-ALL', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-*-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'orderentry-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-monitoring-orderentrybossbapb-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'process-instant-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-process-instant-monitoring*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'carlos-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-monitoring-ormaelbossc-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'logstash-termination-clearance-events-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-termination-clearance-events-live-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', '*-events', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-*-events-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'sisi-monitoring', 'proxy', 'http://elstic.loc:9200/', '', '', '[logstash-sisi-monitoring-live-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}')]
[(1, 0, 'elasticsearch', 'clientfuu-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-live-]YYYY.MM.DD', False, '', '', True, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-qa', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-qa-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-dev', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-dev-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'clientmonitoring-ALL', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-*-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-dev', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-dev-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-qa', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-qa-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-live-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'databasemonitoring-ALL', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-databasemonitoring-*-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'orderentry-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-monitoring-orderentrybossbapb-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'process-instant-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-process-instant-monitoring*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'carlos-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-monitoring-ormaelbossc-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', 'logstash-termination-clearance-events-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-termination-clearance-events-live-]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'), (1, 0, 'elasticsearch', '*-events', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-*-events-*]YYYY.MM.DD', False, '', '', False, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}')]
bei der ich pro line
Code:
(1, 0, 'elasticsearch', 'clientfuu-live', 'proxy', 'http://elstic.loc:9200', '', '', '[logstash-clientmonitoring-live-]YYYY.MM.DD', False, '', '', True, '{"esVersion":5,"interval":"Daily","timeField":"@timestamp"}', False, '{}'),
Pruefen will ob das dritte Element auch in der zweiten Liste im dritten Element vorkommt und wenn ja will ich ueber alle Elemente einen Vergleich machen
Ich bin aber scheinbar zu bloed das bei Google zu finden
Gruss Stefan
-
Moin,
ich glaube du suchst zip:
Code:
for v1, v2 in zip(list_1, list_2):
if v1[2] == v2[2]:
vergleich(v1, v2)
Für sehr große listen gitb es auch noch itertools.zip_longest.
MfG
snowcrash23
-
bei den zip Ansatz halt auch mal dran denken, wie sich das verhält, wenn die Listen nicht gleich lang sind, was vermutlich ohnehin nicht der Fall ist, aber mal probieren was passiert sollte man schon ;)
-
Cool, das ist der erste Schritt, aber ich vertshe ich noch nicht wie ich das anders rum mache, also wenn v1 nicht in Liste 2 drin ist
Also irgendwas wie
Code:
for v1, v2 not in zip(live_data, qa_data):
-
Ich würde grob sagen zwei Fälle und zwei Bedingungen:
Bedingungen sind:
1. es sind zwei Listen
2. beide Listen haben gleich viele Einträge
Fälle:
1. du willst nur die beiden Einträge "vergleichen", da ist zip dein Kumpel
2. du willst den Eintrag aus der ersten Liste, gegen alle Einträge der zweiten Liste "vergleichen", da ist zip nicht dein Kumpel
-- Ich sags noch mal, bedenke auch, was passieren soll, wenn die Listen nicht gleich viele Einträge haben (auch da ist zip nicht dein Kumpel)...
-
Meinme Bedigungen sind
- zwei Listen
- Beide Listen koennen koennen unterschiedlich viele Eintraege haben
-
Nun generel stellt Python dafür die enumerate Funktion zur Verfügung.
Alternativ die itertools, izip und count, arbeiten praktisch genauso, wie enumerate, sind dabei aber angeblich schneller - habe ich nicht nach gemessen.
Du könntest bzw. ich würde eine dritte Liste ins Spiel bringen, die hält dann noch den Wert, denn du zum Einstieg vergleichst - dürfte der Geschwindigkeit gut tun, nur deswegen, Code wäre dann etwa so
Code:
from itertools import izip as zip, count
# ...
for valueToFind in list:
indicesToCheck = [i for i, v in enumerate(simpelHelperList) if v == valueToFind['someKey']]
# oder halt count + izip
indicesToCheck = [i for i, v in zip(count(), simpelHelperList) if v == valueToFind['someKey']]
for indexToCheck in indicesToCheck:
foo = SomeComplexCheckFunction(valueToFind , complexList[indexToCheck])
# ...
Hoffe das hilft ein bisschen.
[edit]hatte ein Bug drin, beide Suchen geben eine Liste von Indizies zurück, die dann abgearbeitet werden muss.
Du kannst auch auf die einfache Liste verzichten
Code:
from itertools import izip as zip, count
# ...
for valueToFind in list:
indicesToCheck = [i for i, v in zip(count(), otherList) if v['someKey']['someOtherKey'] == valueToFind['someKey']['foo']]
for indexToCheck in indicesToCheck:
foo = SomeComplexCheckFunction(valueToFind , otherList[indexToCheck])
# ...