Inhalt von 2 Listen zu einer Liste zusammenfügen (Matchen?)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Dittrich
User
Beiträge: 21
Registriert: Mittwoch 26. Juni 2013, 08:50

Hallo zusammen,
ich habe 2 Listen eine Zeile der Liste sieht in etwa so aus:
Liste 1: (2112;17480;bc:ab:ab:ab:ab:ab ...)
Liste 2: (2112;17480;02;ab.aba.aba.ab ...)
nun möchte ich die beiden Listen zu einer Liste vereinen.

Dabei spielt die Nummer an 2. Stelle (17480) die Hauptrolle.
Diese ist in jeder Liste einzigartig.

Ich möchte also die Einträge aus Liste 2 welche mit der Nummer(17480) aus Liste 1 übereinstimmen in Liste 1 einfügen.
Sprich meine Liste 1 soll so aussehen:
Liste 1: (2112;17480;bc:ab:ab:ab:ab:ab;02;ab.aba.aba.ab ...)

Mfg
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Welches Datenformat hast du denn tatsächlich vorliegen? Du redest von einer Liste, aber anscheinend meinst du damit nicht den Python-Datentyp list. Ich nehme an, dass es sich um Strings handelt, die erst noch in eine Liste - oder eine andere geeignete Datenstruktur - konvertiert werden müssen.

Und was ist mit dem ersten Eintrag? Du hast nur den zweiten Eintrag als eindeutiges Kriterium benannt. Was machst du mit dem ersten Eintrag bei Abweichungen?

Gesetzt den Fall, dass Eintrag 1 auch immer identisch ist, könnte ich mir so etwas vorstellen:

Code: Alles auswählen

import collections

pool = [
    "2112;17480;bc:ab:ab:ab:ab:ab ...",
    "2112;17480;02;ab.aba.aba.ab ..."
]

data = [line.split(';') for line in pool]
print(data)

gatherer = collections.defaultdict(list)
for elements in data:
    gatherer[(elements[0], elements[1])].extend(elements[2:])
print(gatherer)
Zuletzt geändert von /me am Dienstag 2. Juli 2013, 10:29, insgesamt 1-mal geändert.
Dittrich
User
Beiträge: 21
Registriert: Mittwoch 26. Juni 2013, 08:50

Der erste Eintrag(2112) ist irrelevant den brauche ich später nicht mehr ist wohl eine ID die erzeugt wird.
Liste 1: (2112;17480;bc:ab:ab:ab:ab:ab;02;ab.aba.aba.ab ...)
Nur der fette und unterstrichene Teil ist wichtig.
Welches Datenformat hast du denn tatsächlich vorliegen?
Im Endeffekt einen String aber wenn ich das richtig verstandenhabe erhalte ich beim einlesen eine Liste.

Ich bekomme diesen später von einer Datenbank aber für das momentane Bsp habe ich die Daten, welche ich normalerweise vom Server erhalte in einem Text-File gespeichert um den Server nicht unnötig zu belasten.

Soweit mal mein bisheriger Code der eig. nicht viel macht.
Ich lese die Daten ein und gib diese gesplittet aus.

Code: Alles auswählen

get_pppoe_all = open("C:\\Dokumente und Einstellungen\\fddfga\\Desktop\\get_pppoe_all.txt").readlines()
get_pppoe_detail = open("C:\\Dokumente und Einstellungen\\fddfga\\Desktop\\get_pppoe_detail.txt").readlines()
for i in xrange(len(get_pppoe_all)):
    print get_pppoe_all[i].split(';')
    print get_pppoe_detail[i].split(';')  
Das Ergebnis das ich dann erhalte möchte ich wiederum in eine Datenbank schreiben.
In der Datenbank sind bereits Daten und ich möchte die neuen Einträge nur hinzufügen falls sich etwas ändert.
BlackJack

@Dittrich: Das mit dem Index ist ein wenig „unpythonisch”. Da würde man eher `zip()` beziehungsweise `itertools.zip()` verwenden.
Antworten