Python-append() erlaubt nur eindeutige Einträge in einer Liste?

Die python-Dokumentation bedeutet, dass doppelte Elemente vorhanden sein können, in einer Liste, und dies wird unterstützt durch die assignmnet: - Liste = ["wort1", "wort1"]. Allerdings, Python ist append () - nicht scheinen, um ein Element hinzuzufügen, wenn es schon in der Liste. Bin ich etwas fehlt hier oder ist das ein Versuch, auf eine set () - wie Verhalten?

>> d = {}
>> d["word1"] = 1
>> d["word2"] = 2
>> d["word2"] = 3

>> vocab = []
>> for word,freq in d.iteritems():
>> ...  vocab.append(word)

>> for item in vocab:
>> ...  print item

gibt:

word1 
word2

Wo ist die zweite wort2?

  • Es ist hilfreich, wenn Sie don ' T sind die >> und ... - das macht es für andere schwer an die Arbeit mit Ihrem code.
  • Sorry, tatsächlich habe ich Hinzugefügt, dass in der manuell nach dem kopieren meinen code von notepad++, als ich sah, wie einige Leute es hier tun, zu unterscheiden zwischen code und Ausgabe. Ich dachte, es würde helfen, aber Tu es nicht wieder, wie Sie machen einen guten Punkt!
  • Möchten Sie vielleicht eine set von Tupeln eher als ein Wörterbuch. Dies würde es ermöglichen ("word2", 2) nur einmal, egal wie oft Sie es hinzufügen, aber es wird auch ermöglichen ("word2", 3) zur gleichen Zeit.
  • Menschen nicht stecken >>> und ... selbst. Das kommt von der interaktive python-interpreter. Sie sollten es auch-es hilft Fragen zu beantworten wie diese. Hier ist ein online-version, und hier ist, wie zu starten Sie auf Ihrem eigenen computer.
  • Es gibt multidict Implementierungen gibt. Es ist wahrscheinlich einfacher, diese zu benutzen, anstatt die Einbettung solcher Aktivitäten in Ihrem code mit Operationen auf Mengen.
  • das hilft aber nicht, wenn das ist einzigartig paar ("string", "int"), nicht aber einmalige Zeichenfolgen. Ein multiset (bestellt oder anderweitig), können doppelte Schlüssel - ihn nicht zwingen, etwas einzigartig zu sein. Ich nahm die Gegenstände wurden in einem Wörterbuch zunächst für einige Grund, und die OP war gerade verwirrt über das, was ist einzigartig in einem Wörterbuch. In den alten Tagen, hätte ich vorgeschlagen, ein Wörterbuch mapping-Tupel von dummy-Werte - d[("word2", 2)] = "dummy" etc.
  • Eine Menge von Tupeln erlauben würde doppelte "Tasten".
  • Wenn Sie die Modellierung einer Beziehung, einem Teil des Tupel ist der Schlüssel, und das andere den Wert. Es können mehrere Tupel mit dem gleichen key.
  • Ich fürchte, Sie haben sich in Unverständlichkeit. Wir waren diskutieren die Verwendung von sets Modell multimaps; wenn ich sage "Beziehung" meine ich die mathematische Abstraktion.
  • Was Sie schrieb hat einen Sinn, unabhängig von dem, was Sie jetzt behaupten, Sie bedeutete. Sie sagte: "Dies würde es erlauben, ("wort2", 2) nur einmal, egal wie oft Sie es hinzufügen, aber es wird auch ermöglichen ("wort2", 3) in der gleichen Zeit". Das ist eine Beschreibung von multimap Verhalten, wenn ich jemals eines sah.
  • Beabsichtigt war (und ist) das Verhalten einer Menge von Tupeln, mit der die ganze Tupel als Schlüssel, wie beschrieben. Eine multimap erfordert einen Schlüssel und Daten. Wenn Sie das nehmen, als das Verhalten einer multimap, entweder Sie fehlen Daten, oder du nimmst den string als Schlüssel und die Notwendigkeit zu erklären, warum (nach dem einfügen mehrerer Kopien) - die "egal, wie oft Sie es hinzufügen" - Zustand - es ist nur noch ein vorkommen ("wort2", 2). Multimaps nicht garantieren Einzigartigkeit der (Schlüssel -, Daten -) Tupel mehr, als Sie garantieren die Einmaligkeit des Schlüssels.
  • Im Rahmen der darauf hindeutet, dass die OP ersetzen Sie einen map-Typ, mit einer Menge von Paaren, Ihr Vorschlag sei eine form von multimap mit den zusätzlichen Verhalten, dass es für die Eindeutigkeit der (key, value) - pair-Mädchen. Es bleibt eine schlechte Idee, einbetten, solche Operationen in den code zu sammeln, sondern vielmehr, es in einem einzigen (vorzugsweise vor-geschrieben) Klasse.
  • wenn Sie brauchen, einzigartige (string, integer) - Tupel (aber nicht einzigartige strings) als meine ursprüngliche Kommentar war zu erraten, die OPs Vorsatz könnte sein, eine Menge von Tupeln ist der einfache Weg, gerade weil Sie nicht brauchen, um einen code schreiben der eigenen - lassen Sie die set-Typ die Arbeit machen. Es gibt keine Notwendigkeit zu berufen, multimaps an alle - es ist nur so, dass Sie haben eine Idee im Kopf, dass die Zeichenfolge sein muss, ein Schlüssel, der vielleicht sogar die OPs ursprünglichen Fehler, wenn Sie glauben, meine Vermutung. In meinem ursprünglichen Kommentar, der Schlüssel (wenn Sie es nennen) ist die ganze ("string", integer) - Tupel.
  • setzen Sie es auf diese Weise. Auch in der OPs-Frage, es gibt keine lookup-Elementen, indem Sie die Zeichenfolge. Sobald die d container initialisiert, der nur zum iterieren durch alle Elemente, die zum erstellen einer Liste. Der einzige Grund, sich der string ein Schlüssel ist, weil ein Wörterbuch verwendet wurde, die noch im OP war eindeutig nicht erwartet Wörterbuch Verhalten.

InformationsquelleAutor Zach | 2012-05-22
Schreibe einen Kommentar