Python:找到最频繁的字节?

时间:2010-09-09 01:32:12

标签: python byte frequency

我正在寻找一种(最好是简单的)方法来查找和排序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同时删除重复。

2 个答案:

答案 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的回答很好。 :)