2017-05-19 20 views
-1

私は、counterを使って文字をソート順でソートしようとしていますが、同じ頻度のアルファベット順を並べていますが、それは生産する。頻度で並べ替え、次にPythonでアルファベット順に並べ替え

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

は生成します。

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

は、どのように私はそれがアルファベット順で、その後、周波数順得ることができますので、一度だけ現れるすべてがアルファベット順にありますか?そのようにし

+0

あなたは適切な名前 'letter_count.valuesを()'使用して値にアクセスすることができます。 –

+0

@OP、あなたはあなたの意図を明確にすることによって私たちを助けることができます。アルファベット順の紐付きの頻度で、または単一の出現文字だけで*全体*カウンタをソートしますか? –

答えて

2

あなたの質問のように聞こえるのは、リスト全体を頻度で並べ替え、アルファベット順にタイを区切る方法です。あなたはこのようリスト全体を並べ替えることができます。

>>> 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)] 

あなたは、出力はまだ辞書になりたい場合は、あなたがcollections.OrderedDictに変換することができます

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

これは秩序を維持し、としてあなたは見ることができます。 'a'が最も多いので最初です。それ以外はアルファベット順にソートされます。完全を期すために

+1

私はこれが "一度しか出現しないすべての文字を取得する方法"を見ていません –

+1

私はそれを理解しているので、2回発生するエントリはすでにリストの先頭に置かれていたためです。 OPはアルファベット順に裂け目の間の絆を欲しかった。 –

+0

フェアポイント。その文法を無効にしました。 –

0

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

注キー(あなたの手紙)のコレクションを反復処理上のforeachのこと。 キーに関連付けられた値が正確に1

+0

これは結果をソートしません。 –

+0

質問がOPによって明確になりました。あなたはあなたの答えを更新したいかもしれません。 –

1

あなたがこの試すことができますされている場合は、あなたがチェック:このコードは、リストの内包表記を使用して一度だけ発生するすべての文字のリストを作成し、

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) 

をそれらをすべて印刷します。 items()はキーと値のペアを返します。これは、キーの値が1であるかどうかを判断するために使用できます。

+0

質問がOPによって明確にされました。あなたはあなたの答えを更新したいかもしれません。 –

1

、アルファベット順に、単一の発生文字を取得する:

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

質問はOPによって明確にされました。あなたはあなたの答えを更新したいかもしれません。 –

関連する問題