Seite 1 von 1

Tabbellen vergleichen

Verfasst: Samstag 10. Juli 2021, 20:33
von Ernie1412
ich will 2 Tabellen vergleichen, allerdings Im Tabellensatz soll er nur den 1. Eintrag vergleichen.

Code: Alles auswählen

liste1=[("Andreas","20"),("Clea","22"),("Anissa","45"),("Thomas","41")]
liste2=[("Bea","34"),("Clea","25"),("Anika","43")]

for z,list2 in enumerate(liste2[0]):
    print(liste2[z][0])    
    if any(liste2[z][0] in sublist for sublist in liste1[0]):
        print("ja")
    else:
        li=(liste2[z])
        print(li)            
        liste1.append((li))

for z,i in enumerate(liste1):
    print(str(z+1)+": "+i[0]+" - "+i[1])
so gehts nicht.

So sollte das ergebis sein:
liste1=[("Andreas","20"),("Clea","22"),("Anissa","45"),("Thomas","41"),("Bea","34"),("Anika","43")]

also ("Clea","25") sollte weil eintrag1 "Clea" vorhanden nicht in Liste1 geadden werden.
was mache ich falsch, irgenwie bei so einem simplen problem komme ich nicht weiter.
Ohne "tuple" in der "list" gehts, aber mit Tuple nicht

Re: Tabbellen vergleichen

Verfasst: Samstag 10. Juli 2021, 20:56
von sparrow
Für das Beispiel gibt es doch mit dem dict eine viel passendere Datenstruktur. Deren Funktionalität versuchst du hier gerade irgendwie nachzubauen.

Code: Alles auswählen

persons_to_age = {"Andreas": 20, "Clea": 22, "Anissa": 45, "Thomas": 41}
other_persons_to_age = {"Bea": 34, "Clea": 25, "Anika": 43}

for other_person, age in other_persons_to_age.items():
    if other_person not in persons_to_age:
        persons_to_age[other_person] = age

print(persons_to_age)

Re: Tabbellen vergleichen

Verfasst: Samstag 10. Juli 2021, 21:21
von Ernie1412
ich habe 2 Tabellen mit 3 Spalte(name, Alter, größe). (Pyqt5 Tabellen)
die will ich miteinenander vergleichen aber nur der 1. Eintrag(name) ist entscheidend, die anderen sind nur zusäztliche Informationen

ich habe das mit dem Tuple, list nur anders dargestellt zum besseren testen.

Re: Tabbellen vergleichen

Verfasst: Samstag 10. Juli 2021, 21:35
von sparrow
Dem dict ist es egal, ob als Wert ein einziger Wert oder eine Liste enthalten ist.

Re: Tabbellen vergleichen

Verfasst: Samstag 10. Juli 2021, 21:42
von Ernie1412
ich müsste so aber von tabelle in dict umwandeln und zurück oder gibts da ein trick ?
Tabelle sähe halt wie tuple, list aus

Code: Alles auswählen

Liste1={};Liste2={}
liste1=[("Andreas","20"),("Clea","22"),("Anissa","45"),("Thomas","41")]
liste2=[("Bea","34"),("Clea","25"),("Anika","43")]
for z in range(len(liste1)):
    Liste1.update({liste1[z][0]:liste1[z][1]})
for z in range(len(liste2)):
    Liste2.update({liste2[z][0]:liste2[z][1]})
#Liste1 = {"Andreas": 20, "Clea": 22, "Anissa": 45, "Thomas": 41}
##Liste2 = {"Bea": 34, "Clea": 25, "Anika": 43}

for other_person, age in Liste2.items():
    if other_person not in Liste1:
        liste1.append((other_person,age))

print(liste1)
ich habs jetzt so geändert.
Danke für deine Hilfe !!!

Re: Tabbellen vergleichen

Verfasst: Samstag 10. Juli 2021, 22:47
von Ernie1412

Code: Alles auswählen

        tblAKA={};tblINTAKA={}
        for reihe in range(self.tblAKA.rowCount()):
            tblAKA.update({self.tblAKA.item(reihe, 0).text():(self.tblAKA.item(reihe, 1).text(),self.tblAKA.item(reihe, 2).text())})
        for reihe in range(self.tbl_INTAKA.rowCount() ):
            tblINTAKA.update({self.tbl_INTAKA.item(reihe, 0).text():(self.tbl_INTAKA.item(reihe, 1).text(),self.tbl_INTAKA.item(reihe, 2).text())})
        for name, art_land in tblINTAKA.items():
            if name not in tblAKA:
                neue_Zeile=self.tblAKA.rowCount()+1
                self.tblAKA.setRowCount(neue_Zeile)
                self.tblAKA.setItem(neue_Zeile-1, 0,QtWidgets.QTableWidgetItem(name))                
                self.tblAKA.setItem(neue_Zeile-1, 1,QtWidgets.QTableWidgetItem(art_land[0]))
                self.tblAKA.setItem(neue_Zeile-1, 2,QtWidgets.QTableWidgetItem(art_land[1]))
Das ist der Code finally :)

das klappt so 1a
Dank dir nochmals !

Re: Tabbellen vergleichen

Verfasst: Samstag 10. Juli 2021, 22:48
von Max07t
Ich habe das Problem wie folgt gelöst:

Code: Alles auswählen

liste1 = [("Andreas","20"),("Clea","22"),("Anissa","45"),("Thomas","41")]
liste2 = [("Bea","34"),("Clea","25"),("Anika","43")]

for i in liste2:
    if i[0] not in [name[0] for name in liste1]:
        liste1.append(i)

Re: Tabbellen vergleichen

Verfasst: Samstag 10. Juli 2021, 22:55
von Ernie1412
jo klapt auch, wäre sogar die einfachste Lösung.
"not in [name[0]" <-- wäre ich wohl nicht draufgekommen

Re: Tabbellen vergleichen

Verfasst: Sonntag 11. Juli 2021, 11:39
von Sirius3
`;` verwendet man nicht, sondern schreibt jede Anweisung in eine neue Zeile, um den Code lesbarer zu halten. Man benutzt nicht update um einen einzelnen Wert eines Wörterbuchs zu setzen.
Man benutzt keine Abkürzungen in Variablennamen, weil sie das lesen sehr erschwert. tbl weiß ich, dass es eigentlich table heißen sollte, AKA und INTAKA sind für mich Rätsel und Rätsel möchte man beim Programmieren nicht lösen.
In `tblAKA` brauchst Du doch gar nicht alle Informationen, sondern nur die Namen und dafür ist ein Set ausreichend.
Und das zweite Wörterbuch brauchst Du gar nicht, weil Du gleich die Tabelle erweitern kannst.

Code: Alles auswählen

        names = set(
            self.tblAKA.item(reihe, 0).text()
            for reihe in range(self.tblAKA.rowCount())
        )
        neue_Zeile = self.tblAKA.rowCount()
        for reihe in range(self.tbl_INTAKA.rowCount()):
            name = self.tbl_INTAKA.item(reihe, 0).text()
            if name not in names:
                art = self.tbl_INTAKA.item(reihe, 1).text()
                land = self.tbl_INTAKA.item(reihe, 2).text()
                self.tblAKA.setRowCount(neue_zeile + 1)
                self.tblAKA.setItem(neue_zeile, 0, QtWidgets.QTableWidgetItem(name))                
                self.tblAKA.setItem(neue_zeile, 1, QtWidgets.QTableWidgetItem(art))
                self.tblAKA.setItem(neue_zeile, 2, QtWidgets.QTableWidgetItem(land))
                neue_zeile += 1