Python中给字典排序的七种方法详解

Written by

in

文章目录
  • 我们经常在计算机等级考试中遇到词频排序的问题,我们一般先通过生成字典的方法,统计词的频次,然后给字典排序。 那么如何快速地给字典按照键值进行排序呢?下面介绍七种方法。第一种方法相对比较常见,但是第二种方法你可能第一次见,第三种方法是比较麻烦的一种,还有一些让步意想不到的几种方法供你参考。 例:有下面的列表dic={'a': 4, 'b': 3, 'c': 2, 'd': 1},如何实现字典的升序排列呢?
  • >>> dic={‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1} >>> sorted(dic.items(), key=lambda x: x[1]) [(‘d’, 1), (‘c’, 2), (‘b’, 3), (‘a’, 4)] 这里,通过dic.items()获取由字典键名和键值组成的元组列表,然后通过自定义函数,获取元组的第2个元素,作为排序的依据即key, 默认是按照升序排列,如果是降序排列可以把reverse设为True,即: >>> dic={‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1} >>> sorted(dic.items(), key=lambda x: x[1],reverse=True) {‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1}
  • >>> import operator >>> sorted(dic.items(), key=operator.itemgetter(1)) [(‘d’, 1), (‘c’, 2), (‘b’, 3), (‘a’, 4)] operator. itemgetter(item) operator. itemgetter(*items) 功能是返回一个可调用对象,该对象可以使用操作__getitem__()方法从自身的操作中捕获item。如果制定了多个items,返回一个由查询值组成的元组。例如:运行f =itemgetter(2),然后调用f(r),返回r[2]。这里通过operator获得了dic.items()中的键值。注意operator是内置的包,无需安装。
  • >>> dic={‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1} >>> tup=[(x[1],x[0]) for x in dic.items()]#元素互换位置 >>> sorted(tup) #排序 [(1, ‘d’), (2, ‘c’), (3, ‘b’), (4, ‘a’)] >>> [(x[1],x[0]) for x in dic.items()] >>> [(x[1],x[0]) for x in tup] #换回原来的位置 >>> [(‘d’, 1), (‘c’, 2), (‘b’, 3), (‘a’, 4)] 用列表推导式,交换元组中元素的位置,排序后再交换回来,这种方法有点儿麻烦,但是逻辑清楚,适合新手。还有哪些好的方法,欢迎大家提出来,一起来交流。
  • from collections import Counter dic={‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1} count = Counter(dic) print(list(count.items()))
  • 如果进行数据分析,可以把字典读取成数据框,然后采用pandas进行排序,效果也非常不错。 import pandas as pd dic = {‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1} df = pd.DataFrame.from_dict(dic, orient=’index’).reset_index() df.columns = [‘key’, ‘value’] df_sorted = df.sort_values(by=’value’).reset_index(drop=True) # 如果你想要得到一个排序后的字典 sorted_dic = dict(zip(df_sorted[‘key’], df_sorted[‘value’])) print(sorted_dic) # 输出: {‘d’: 1, ‘c’: 2, ‘b’: 3, ‘a’: 4}
  • 可以自定义一个函数,把字典和排序的方式作为参数传入,这样需要排序时就可以直接调用此函数来进行,可以简化代码,如下扭示: def sort_dict_by_value(d, reverse=False): return dict(sorted(d.items(), key=lambda x: x[1], reverse=reverse)) dic = {‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1} sorted_dic = sort_dict_by_value(dic) sorted_dic_desc = sort_dict_by_value(dic, reverse=True) print(sorted_dic_desc) # 输出: {‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1}
  • 字典推导式据有简单直接,运行速度快等特点,不需要导出其它的包,也不需要引用什么模块,排序效率非常的高,值得推荐。 dic = {‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1} # 使用sorted()和字典推导式按值排序 sorted_dic = {k: v for k, v in sorted(dic.items(), key=lambda x: x[1])} print(sorted_dic) # 输出: {‘d’: 1, ‘c’: 2, ‘b’: 3, ‘a’: 4} # 如果需要降序 sorted_dic_desc = {k: v for k, v in sorted(dic.items(), key=lambda x: x[1], reverse=True)} print(sorted_dic_desc) # 输出: {‘a’: 4, ‘b’: 3, ‘c’: 2, ‘d’: 1}
  • 以上七种方法殊途同归,都可以实现字典的排序,但是第一种方法是Python二级中采用的惯常作法,容易理解,请大家牢记忆。 counter和operator的方法也很简单,可以作为备用。积累常见的字典排序方法,可以帮助我们巩固基础知识,举一反三,深化理解。 到此这篇关于Python中给字典排序的七种方法详解的文章就介绍到这了,更多相关Python字典排序内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: python字典根据key排序的实现 Python如何根据字典中的值排序 python列表字典排序的实现示例 python中字典dict排序sorted的实现 python字典排序浅析介绍
  • 目录
    • 引言
    • 第一种方法:利用自定义函数lambda
    • 第二种方法:利用operator的方法
    • 第三种方法:列表推导式法
    • 第四种方法:用Counter的方法
    • 第五种方法:利用pandas的方法
    • 第六种方法:自定义函数法
    • 第七种方法:字典推导式法
    • 学后总结

    我们经常在计算机等级考试中遇到词频排序的问题,我们一般先通过生成字典的方法,统计词的频次,然后给字典排序。

    那么如何快速地给字典按照键值进行排序呢?下面介绍七种方法。第一种方法相对比较常见,但是第二种方法你可能第一次见,第三种方法是比较麻烦的一种,还有一些让步意想不到的几种方法供你参考。

    例:有下面的列表dic={'a': 4, 'b': 3, 'c': 2, 'd': 1},如何实现字典的升序排列呢?

    >>> dic={'a': 4, 'b': 3, 'c': 2, 'd': 1}
    >>> sorted(dic.items(), key=lambda x: x[1])
    [('d', 1), ('c', 2), ('b', 3), ('a', 4)]

    这里,通过dic.items()获取由字典键名和键值组成的元组列表,然后通过自定义函数,获取元组的第2个元素,作为排序的依据即key, 默认是按照升序排列,如果是降序排列可以把reverse设为True,即:

    >>> dic={'a': 4, 'b': 3, 'c': 2, 'd': 1}
    >>> sorted(dic.items(), key=lambda x: x[1],reverse=True)
    {'a': 4, 'b': 3, 'c': 2, 'd': 1}

    >>> import operator
    >>> sorted(dic.items(), key=operator.itemgetter(1))
    [('d', 1), ('c', 2), ('b', 3), ('a', 4)]
    operator. itemgetter(item)
    operator. itemgetter(*items)

    功能是返回一个可调用对象,该对象可以使用操作__getitem__()方法从自身的操作中捕获item。如果制定了多个items,返回一个由查询值组成的元组。例如:运行f =itemgetter(2),然后调用f(r),返回r[2]。这里通过operator获得了dic.items()中的键值。注意operator是内置的包,无需安装。

    >>>  dic={'a': 4, 'b': 3, 'c': 2, 'd': 1}
    >>> tup=[(x[1],x[0]) for x in dic.items()]#元素互换位置
    >>> sorted(tup) #排序
    [(1, 'd'), (2, 'c'), (3, 'b'), (4, 'a')]
    >>> [(x[1],x[0]) for x in dic.items()]
    >>> [(x[1],x[0]) for x in tup] #换回原来的位置
    >>> [('d', 1), ('c', 2), ('b', 3), ('a', 4)]

    用列表推导式,交换元组中元素的位置,排序后再交换回来,这种方法有点儿麻烦,但是逻辑清楚,适合新手。还有哪些好的方法,欢迎大家提出来,一起来交流。

    from collections import Counter
    dic={'a': 4, 'b': 3, 'c': 2, 'd': 1}
    count = Counter(dic)
    print(list(count.items()))

    如果进行数据分析,可以把字典读取成数据框,然后采用pandas进行排序,效果也非常不错。

    import pandas as pd  
      
    dic = {'a': 4, 'b': 3, 'c': 2, 'd': 1}  
    df = pd.DataFrame.from_dict(dic, orient='index').reset_index()  
    df.columns = ['key', 'value']  
    df_sorted = df.sort_values(by='value').reset_index(drop=True)  
      
    # 如果你想要得到一个排序后的字典  
    sorted_dic = dict(zip(df_sorted['key'], df_sorted['value']))  
      
    print(sorted_dic)  
    # 输出: {'d': 1, 'c': 2, 'b': 3, 'a': 4}

    可以自定义一个函数,把字典和排序的方式作为参数传入,这样需要排序时就可以直接调用此函数来进行,可以简化代码,如下扭示:

    def sort_dict_by_value(d, reverse=False):  
        return dict(sorted(d.items(), key=lambda x: x[1], reverse=reverse))  
      
    dic = {'a': 4, 'b': 3, 'c': 2, 'd': 1}  
    sorted_dic = sort_dict_by_value(dic)  
    sorted_dic_desc = sort_dict_by_value(dic, reverse=True)  
      
    print(sorted_dic_desc)  
    # 输出: {'a': 4, 'b': 3, 'c': 2, 'd': 1}

    字典推导式据有简单直接,运行速度快等特点,不需要导出其它的包,也不需要引用什么模块,排序效率非常的高,值得推荐。

    dic = {'a': 4, 'b': 3, 'c': 2, 'd': 1}  
      
    # 使用sorted()和字典推导式按值排序  
    sorted_dic = {k: v for k, v in sorted(dic.items(), key=lambda x: x[1])}  
      
    print(sorted_dic)  
    # 输出: {'d': 1, 'c': 2, 'b': 3, 'a': 4}  
      
    # 如果需要降序  
    sorted_dic_desc = {k: v for k, v in sorted(dic.items(), key=lambda x: x[1], reverse=True)}  
      
    print(sorted_dic_desc)  
    # 输出: {'a': 4, 'b': 3, 'c': 2, 'd': 1}

    以上七种方法殊途同归,都可以实现字典的排序,但是第一种方法是Python二级中采用的惯常作法,容易理解,请大家牢记忆。

    counter和operator的方法也很简单,可以作为备用。积累常见的字典排序方法,可以帮助我们巩固基础知识,举一反三,深化理解。

    到此这篇关于Python中给字典排序的七种方法详解的文章就介绍到这了,更多相关Python字典排序内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!

    您可能感兴趣的文章:

    • python字典根据key排序的实现
    • Python如何根据字典中的值排序
    • python列表字典排序的实现示例
    • python中字典dict排序sorted的实现
    • python字典排序浅析介绍

    站内搜索