2015-10-19 29 views
-1

我已經編寫了一個程序,其中計算了字符串中發生字母的頻率。如何對字典進行排序並獲得第一個和最後一個元素

Input: AAAABBBBBCCDEEEEEEEEEEFFF 

我希望我的輸出只能是那些發生次數最多,發生次數最少的字母以及發生次數。

import sys 
seq=sys.argv[1] 
count = {} 
for i in seq: 
    if count.has_key(i): 
    count[i] += 1 
    else: 
    count[i] = 1 

for i in sorted(count, key=count.get, reverse=True): 
    print i, count[i] 

輸出:

Actual Output: 
E:10, B:5, A:4, F:3, C:2, D:1 

Expected Output: 
E: 10 , D: 1 
+1

除了'collections.Counter',這是值得學習一下'collections.defaultdict'以避免寫if語句就像你在更一般的語句寫了一個。另外'dict.setdefault'。 –

回答

0

你幾乎沒有。你沒有理由迭代整個分類字典。

sorted_count = sorted(count, key=count.get, reverse=True) 
print sorted_count[0] 
print sorted_count[-1] 

或者:

print min(count, key=count.get) 
print max(count, key=count.get) 
+0

這只是返回字母表,我的意思是E,D不是他們的值,如E:10,D:1 –

+0

這是微不足道的修復。你有一本字典,你可以通過鍵訪問值。所以'count [sorted_count [0]]'會給你計數。你也可以使用'sorted(count.items(),key = lambda item:item [0],reverse = True)' –

4

您可以使用collections.Counter來算的字母:

>>> import operator, collections 
>>> counter = collections.Counter('AAAABBBBBCCDEEEEEEEEEEFFF') 
Counter({'E': 10, 'B': 5, 'A': 4, 'F': 3, 'C': 2, 'D': 1}) 

>>> sorted_counter = sorted(counter, key=operator.itemgetter(1), reverse=True) 
[('E', 10), ('B', 5), ('A', 4), ('F', 3), ('C', 2), ('D', 1)] 

>>> print sorted_counter[-1] 
('D', 1) 

>>> print sorted_counter[0] 
('E', 10) 
+0

無需排序:'min'和'max'也有'鍵'參數。 –

+0

而不使用集合和運算符。 –

相關問題