我正在寻找一种(最好是简单的)方法来查找和排序python流元素中最常见的字节。
e.g。
>>> freq_bytes(b'hello world')
b'lohe wrd'
甚至
>>> freq_bytes(b'hello world')
[108,111,104,101,32,119,114,100]
我目前有一个以list[97] == occurrences of "a"
形式返回列表的函数。我需要对它进行排序。
我想我基本上需要翻转列表,以便list[a] = b --> list[b] = a
同时删除重复。
答案 0 :(得分:6)
尝试收藏模块中的Counter class。
from collections import Counter
string = "hello world"
print ''.join(char[0] for char in Counter(string).most_common())
请注意,您需要使用Python 2.7或更高版本。
编辑:忘记了most_common()方法返回了一个值/计数元组列表,并使用列表推导来获取值。
答案 1 :(得分:3)
def frequent_bytes(aStr):
d = {}
for char in aStr:
d[char] = d.setdefault(char, 0) + 1
myList = []
for char, frequency in d.items():
myList.append((frequency, char))
myList.sort(reverse=True)
return ''.join(myList)
>>> frequent_bytes('hello world')
'lowrhed '
我只是尝试了一些明显的事情。不过,@ kindall的回答很好。 :)