Duplikate vom Output in Python entfernen

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
SeriousRuffy
User
Beiträge: 32
Registriert: Dienstag 16. Dezember 2014, 21:16

Hallo zusammen,

habe das folgende Problem:

Beispiel:

Code: Alles auswählen

g_data = soup.find_all("div", {"class": "itemsContent clearafter"})
for item in g_data:
        header = item.find_all("div", {"class": "InnprodInfos"})
        print(header[0].contents[0].text.strip())
Bekomme folgenden Output:

Code: Alles auswählen

DMZ 3rd Tunnel - Korean Demilitarized Zone Day Tour from Seoul
Panmunjeom Day Tour
Seoul City Half Day Private Tour
The Soul of Seoul - Small Group Tour
Seoul Helicopter Tour
Seoul City Full Day Tour
Seoul City Half Day Tour
The Street Museum in the Urban Core - Small Group Tour
Korean Folk Village Day Tour
DMZ 3rd Tunnel - Korean Demilitarized Zone Day Tour from Seoul
Panmunjeom Day Tour
Seoul City Half Day Private Tour
The Soul of Seoul - Small Group Tour
Seoul Helicopter Tour
Seoul City Full Day Tour
Seoul City Half Day Tour
The Street Museum in the Urban Core - Small Group Tour
Korean Folk Village Day Tour

Wie ihr sehen könnt, bekommen ich den gewünschten Ouput doppelt wieder. Idealerweise würde ich den nur einmal bekommen.

Daher habe ich versucht, die Duplikate zu entfernen. Zuerst mit list und dann mit set

list:

Code: Alles auswählen

result = []
for item in g_data:
    header = item.find_all("div", {"class": "InnprodInfos"})
    item = header[0].contents[0].text.strip()
    if item not in result:
        result.append(item)

print( '\n'.join(result))

Set:

Code: Alles auswählen

result = set()
for item in g_data:
    header = item.find_all("div", {"class": "InnprodInfos"})
    result.add(header[0].contents[0].text.strip())

print('\n'.join(result))
Allerdings bekomme ich immernoch Duplikate zurück.


Habe es weiter versucht:

Code: Alles auswählen

already_printed = set()
for item in g_data:
    header = item.find_all("div", {"class": "InnprodInfos"})
    item = header[0].contents[0].text.strip()
    if item not in already_printed:
        print(item)
        already_printed.add(item)
Scheint nichts zu klappen, was ich versuche. Könnt Ihr mir Feedback geben, was ich am besten machen soll um die Duplikate zu deleten?
BlackJack

@SeriousRuffy: Schau Dir die `repr()`-Darstellung der Duplikate an. Und überprüfe auch ob Du die Daten nicht woanders nochmal ausgibst oder ob Du die Funktion/Methode nicht zweimal aufrufst und deshalb zweimal die Ausgabe bekommst.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wenn du mit `set` weiterhin Duplikate hast, dann sind es eben keine identischen Duplikate. Ist es moeglich, dass es noch fuehrenden oder abschliesssenden Whitespace gibt?
Edit: Das kannst du am besten mit `repr` ueberpruefen, wie BlackJack vorgeschlagen hat.
SeriousRuffy
User
Beiträge: 32
Registriert: Dienstag 16. Dezember 2014, 21:16

Danke für euer Feedback:)
Antworten