首页 > 代码库 > 字典排序及应用

字典排序及应用

字典排序:

因为我们都知道字典是无序的,所以也没有想过字典怎么排序,直到……唉

废话不多说,先看按值、按键排序的方法吧。

有一个字典dic1 = {‘tired‘: 1, ‘car‘: 2, ‘man‘: 2, ‘of‘: 1, ‘front‘: 1, ‘who‘: 2, ‘in‘: 1, ‘run‘: 2, ‘exhausted‘: 1, ‘get‘: 2, ‘behind‘: 1}

按值排序:dic2 = sorted(dic1.items(),key=lambda d:d[1],reverse=True)

    分析:dic1.items()是类似[(‘tired‘,1),(‘car‘,2),()...]这样列表套元组的数据类型(但它不是列表,一个小元组就是一个键值对)。

         key对应一个匿名函数,参数d是前面那个序列的元素,是个小元组,匿名函数的结果是就是键值对的值。

         reverse,默认按从小到大的顺序排序,reverse=True表示反序。

    结果:[(‘car‘, 2), (‘man‘, 2), (‘who‘, 2), (‘run‘, 2), (‘get‘, 2), (‘tired‘, 1), (‘of‘, 1), (‘front‘, 1), (‘in‘, 1), (‘exhausted‘, 1), (‘behind‘, 1)]

按键排序:dic3 = sorted(dic1.items(),key=lambda d:d[0],reverse=True)

    结果:[(‘who‘, 2), (‘tired‘, 1), (‘run‘, 2), (‘of‘, 1), (‘man‘, 2), (‘in‘, 1), (‘get‘, 2), (‘front‘, 1), (‘exhausted‘, 1), (‘car‘, 2), (‘behind‘, 1)]

如果直接排序呢?dic4=sorted(dic1)

    结果:[‘behind‘, ‘car‘, ‘exhausted‘, ‘front‘, ‘get‘, ‘in‘, ‘man‘, ‘of‘, ‘run‘, ‘tired‘, ‘who‘],只有键没有值。

实例:找出一个字符串中,字符出现频率最高的5个字符及其出现频率。

#有换行,有各种标点符号的字符串
str1 = """Man who run in front of car, get tired.
man who run behind car, get exhausted."""
#为了去除换行符,先分成一行一行的,以换行符为分隔符。
linelist = str1.split(‘\n‘)
wordlist2 = []
for line in linelist:
    #以空格为分隔符,分成一个单词一个单词的
    wordlist = line.split(‘ ‘)
    for word1 in wordlist:
        #去除标点符号最后把所有单词添加到一个列表
        lastchar = word1[-1]
        if lastchar in [",", ".", "!", "?", ";"]:
            word2 = word1.rstrip(lastchar)
        else:
            word2 = word1
        wordlist2.append(word2.lower())
fredic = {}
for word3 in wordlist2:
    #统计出现频率,构造字典,键为单词,值为出现频率
    fredic[word3] = fredic.get(word3,0) + 1
print(fredic)
#按值排序
fredic2 = sorted(fredic.items(),key=lambda d:d[1],reverse=True)
print(fredic2[0:5])

 

字典排序及应用