2017-05-19 2 views
-1

Ich versuche Zähler zu verwenden, um Buchstaben nach Vorkommen zu sortieren, und legen Sie alle, die die gleiche Häufigkeit haben, in alphabetischer Reihenfolge, aber ich kann nicht auf den Wert des Wörterbuchs zugreifen es produziert.Sortieren Counter nach Häufigkeit, dann alphabetisch in Python

letter_count = collections.Counter("alphabet") 
print(letter_count) 

produziert:

Counter({'a': 2, 'l': 1, 't': 1, 'p': 1, 'h': 1, 'e': 1, 'b': 1}) 

Wie kann ich es durch Frequenz geordnet bekommen, dann nach alphabetischer Reihenfolge, so alles, was nur einmal auftaucht ist in alphabetischer Reihenfolge?

+0

Sie die Werte zugreifen können, die treffend benannte 'letter_count.values ​​mit()'. –

+0

@OP, Sie können uns helfen, indem Sie Ihre Absicht klären. Möchten Sie den * ganzen * Counter sortiert nach Häufigkeit mit alphabetisch gesperrten Bindungen oder nur die single occurrence Buchstaben? –

Antwort

2

Es klingt wie Ihre Frage ist, wie Sie die gesamte Liste nach Häufigkeit sortieren, dann bricht Bindungen alphabetisch. Sie können die gesamte Liste wie folgt sortieren:

>>> a = sorted(letter_count.items(), key=lambda item: (-item[1], item[0])) 
>>> print(a) 
# [('a', 2), ('b', 1), ('e', 1), ('h', 1), ('l', 1), ('p', 1), ('t', 1)] 

Wenn Sie die Ausgabe wollen noch ein dict sein, können Sie es in ein collections.OrderedDict umwandeln kann:

>>> collections.OrderedDict(a) 
# OrderedDict([('a', 2), 
#    ('b', 1), 
#    ('e', 1), 
#    ('h', 1), 
#    ('l', 1), 
#    ('p', 1), 
#    ('t', 1)]) 

Dies bewahrt die Bestellung, wie du kannst sehen. 'a' ist das erste, weil es am häufigsten ist. Alles andere ist alphabetisch sortiert.

+1

Ich kann nicht sehen, wie dies "alle Buchstaben, die nur einmal vorkommen" erhält –

+1

Wie ich es verstehe, wurde das gesagt, weil der Eintrag, der zweimal auftritt, bereits an der Spitze der Liste gesetzt wurde; Das OP wollte die Verbindungen zwischen den Hapaxes alphabetisch trennen. –

+0

Messepunkt. Diese Syntax jetzt ausgewichen. –

0

Auf diese Weise:

for l in letter_count: 
    if letter_count[l] == 1: 
     print(l) # or do what you want 

Beachten Sie, dass die foreach auf die Sammlung Iterierten auf den Tasten (Ihre Briefe). Dann überprüfen Sie, ob der Wert mit dem Schlüssel zugeordnet ist genau 1.

+0

Dies sortiert die Ergebnisse nicht. –

+0

Frage wurde von OP geklärt; Vielleicht möchten Sie Ihre Antwort aktualisieren. –

1

ist können Sie dies versuchen:

letter_count = collections.Counter("alphabet") 

the_letters = [a for a, b in letter_count.items() if b == 1] 
letters.sort() 
print("letters that occur only once:") 

for i in the_letters: 
    print(i) 

Dieser Code eine Liste aller Briefe erstellt, die nur einmal vorkommen Listen Verständnis mit, und dann druckt sie alle aus. items() gibt ein Schlüssel/Wert-Paar zurück, mit dem festgestellt werden kann, ob der Wert eines Schlüssels gleich eins ist.

+0

Frage wurde von OP geklärt; Vielleicht möchten Sie Ihre Antwort aktualisieren. –

1

Aus Gründen der Vollständigkeit, die Single-Vorkommen Buchstaben in alphabetischer Reihenfolge zu bekommen:

letter_count = collections.Counter("alphabet") 

single_occurrences = sorted([letter for letter, occurrence in letter_count.items() if occurrence == 1]) 
print(single_occurrences) 
# prints: ['b', 'e', 'h', 'l', 'p', 't'] 
+0

Frage wurde von OP geklärt; Vielleicht möchten Sie Ihre Antwort aktualisieren. –

Verwandte Themen