python3.5 使用sorted和OrderedDict 对字典排序

1 首先介绍一下 sorted() 函数:

输入代码:print(help(sorted)), 查看函数用法
输出为:

Help on built-in function sorted in module builtins:

sorted(iterable, key=None, reverse=False)
    Return a new list containing all items from the iterable in ascending order.

    A custom key function can be supplied to customize the sort order, and the
    reverse flag can be set to request the result in descending order.

None

sorted(iterable, key=None, reverse=False) , 返回一个有序的列表

  • iterable , 一个可以迭代的对象
  • key , 用来比较的对象,可以省略
  • reverse , 指定是否颠倒,即是否逆序,默认是正序, 可以省略

2 使用 sorted 对字典排序,注意字典的键key值都是同类型的

test = {1: "a", 3: "d", 6: "g", 2: "c", 5: "e", 0: "f", 4: 'b'}

# 对字典的key值列表排序,返回列表
print(sorted(test.keys()))

# 对字典的键值对元组列表排序,按元组的第1个元素排序,也就是 key
# 返回的是一个元组列表
print(sorted(test.items(), key=lambda obj: obj[0]))

# 对字典的键值对元组列表排序,按元组的第2个元素排序,也就是 value
# 返回的是一个元组列表
print(sorted(test.items(), key=lambda obj: obj[1]))

输出结果为:

[0, 1, 2, 3, 4, 5, 6]
[(0, 'f'), (1, 'a'), (2, 'c'), (3, 'd'), (4, 'b'), (5, 'e'), (6, 'g')]
[(1, 'a'), (4, 'b'), (2, 'c'), (3, 'd'), (5, 'e'), (0, 'f'), (6, 'g')]

如果要反序,添加 reverse=True 即可, 如:sorted(test.keys(), reverse=True)


3 使用 OrderedDict 对字典排序

from collections import OrderedDict

test = {1: "a", 3: "d", 6: "g", 2: "c", 5: "e", 0: "f", 4: 'b'}

# 普通 dict 插入元素时是无序的,使用 OrderedDict 按元素插入顺序排序
# 对字典按key排序, 默认升序, 返回 OrderedDict
def sort_key(old_dict, reverse=False):
    """对字典按key排序, 默认升序, 不修改原先字典"""
    # 先获得排序后的key列表
    keys = sorted(old_dict.keys(), reverse=reverse)
    # 创建一个新的空字典
    new_dict = OrderedDict()
    # 遍历 key 列表
    for key in keys:
        new_dict[key] = old_dict[key]
    return new_dict


# 对字典按 value 排序,默认升序, 返回 OrderedDict
def sort_value(old_dict, reverse=False):
    """对字典按 value 排序, 默认升序, 不修改原先字典"""
    # 获取按 value 排序后的元组列表
    items = sorted(old_dict.items(), key=lambda obj: obj[1], reverse=reverse)
    # 创建一个新的空字典
    new_dict = OrderedDict()
    # 遍历 items 列表
    for item in items:
        # item[0] 存的是 key 值
        new_dict[item[0]] = old_dict[item[0]]
    return new_dict

print(sort_key(c))
print(sort_value(c))

输出结果为:

OrderedDict([(0, 'f'), (1, 'a'), (2, 'c'), (3, 'd'), (4, 'b'), (5, 'e'), (6, 'g')])
OrderedDict([(1, 'a'), (4, 'b'), (2, 'c'), (3, 'd'), (5, 'e'), (0, 'f'), (6, 'g')])

使用 OrderedDict 可以保证元素按插入顺序排序,如果修改上面函数:

# 创建一个新的空字典
new_dict = {}

这样创建的就是一个普通字典,虽然之前已经对key或value排好序了,但是插入的时候还是无序的,所以没作用。

简化使用 OrderedDict :

from collections import OrderedDict

test = {1: "a", 3: "d", 6: "g", 2: "c", 5: "e", 0: "f", 4: 'b'}

print(OrderedDict(sorted(test.items(), key=lambda obj: obj[0])))
print(OrderedDict(sorted(test.items(), key=lambda obj: obj[1])))

输出结果还是和之前一样:

OrderedDict([(0, 'f'), (1, 'a'), (2, 'c'), (3, 'd'), (4, 'b'), (5, 'e'), (6, 'g')])
OrderedDict([(1, 'a'), (4, 'b'), (2, 'c'), (3, 'd'), (5, 'e'), (0, 'f'), (6, 'g')])
### 回答1: sorted函数可以对字典进行排序。默认按照字典的键进行排序。 如果要按照字典的值进行排序,可以使用lambda函数operator.itemgetter()来实现。 示例代码: ``` import operator d = {'a': 2, 'b': 1, 'c': 3} sorted_d = sorted(d.items(), key=operator.itemgetter(1)) print(sorted_d) ``` 输出结果: ``` [('b', 1), ('a', 2), ('c', 3)] ``` 也可以使用lambda 函数 ``` d = {'a': 2, 'b': 1, 'c': 3} sorted_d = sorted(d.items(), key=lambda x: x[1]) print(sorted_d) ``` 输出结果: ``` [('b', 1), ('a', 2), ('c', 3)] ``` ### 回答2: 在Python中,字典是一种存储键值对的数据结构,通常用于快速查找访问数据。但是,当需要对字典进行排序时,我们需要使用python中的sorted函数。 sorted函数是用来排序数据的,可以对字符串、列表、元组、字典等对象进行排序。对于字典,如果要将其按照键(key)或值(value)进行排序,需要使用sorted的关键字参数key。使用key可以指定一个排序函数,通过返回值对字典的键或值进行排序。 以下是使用key实现对字典按照键排序: ```python student_dict = {'Tom': 90, 'Alice': 78, 'Bob': 88, 'David': 80} sorted_dict = dict(sorted(student_dict.items(), key=lambda item: item[0])) print(sorted_dict) ``` 输出:{'Alice': 78, 'Bob': 88, 'David': 80, 'Tom': 90} 在上述代码中,我们使用items方法将字典转换为键值对元组的列表,然后使用sorted函数对列表进行排序,key=lambda item: item[0]指定以键为排序依据。最后,我们使用dict方法将排序后的列表转换回字典。 以下是使用key实现对字典按照值排序: ```python student_dict = {'Tom': 90, 'Alice': 78, 'Bob': 88, 'David': 80} sorted_dict = dict(sorted(student_dict.items(), key=lambda item: item[1])) print(sorted_dict) ``` 输出:{'Alice': 78, 'David': 80, 'Bob': 88, 'Tom': 90} 在上述代码中,我们同样使用items方法将字典转换为键值对元组的列表,然后使用sorted函数对列表进行排序,key=lambda item: item[1]指定以值为排序依据。最后,我们使用dict方法将排序后的列表转换回字典。 最后,我们需要注意的是,排序后的字典不是原字典的视图,而是一个新字典,它与原字典的项的相对顺序相同。 ### 回答3: 在 Python 中,字典是一种无序的数据类型,它由键值组成。如果要按照字典的键或值来进行排序,我们可以使用 Python 中的 sorted() 函数。 sorted() 函数可以用于按照字典的键或值来进行排序。当 sorted() 函数应用于字典时,它会返回一个由键值对组成的列表。我们可以使用 lambda 函数来指定排序的方式。 以按照字典键值升序排序为例,代码如下: ``` my_dict = {'apple': 5, 'banana': 4, 'orange': 6} sorted_dict = sorted(my_dict.items(), key=lambda x: x[0]) print(sorted_dict) ``` 上述代码将输出:[('apple', 5), ('banana', 4), ('orange', 6)],其中,sorted() 函数根据字典的键进行排序lambda 函数指定了排序的方式,x[0] 表示按照键来排序。 如果想按照字典的值进行排序,则需要将 x[0] 改为 x[1],代码如下: ``` my_dict = {'apple': 5, 'banana': 4, 'orange': 6} sorted_dict = sorted(my_dict.items(), key=lambda x: x[1]) print(sorted_dict) ``` 上述代码将输出:[('banana', 4), ('apple', 5), ('orange', 6)],其中,sorted() 函数根据字典的值进行排序。 需要注意的是,sorted() 函数会将字典转换为列表进行排序,因此输出结果中的每个元素都是一个包含键值对的元组。如果需要将排序结果转换回字典,我们可以使用 Python 中的 dict() 函数,代码如下: ``` my_dict = {'apple': 5, 'banana': 4, 'orange': 6} sorted_dict = sorted(my_dict.items(), key=lambda x: x[0]) final_dict = dict(sorted_dict) print(final_dict) ``` 上述代码将输出:{'apple': 5, 'banana': 4, 'orange': 6},其中,final_dict 是一个排序后的字典
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值