[Python高效编程] - 根据字典的大小,对字典中的项排序

本文介绍如何在Python中根据字典的值进行排序,包括使用sorted函数配合lambda表达式的方法,以及利用zip函数将字典转换为元组进行排序的技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python中根据字典的大小,对字典中的项排序

开发环境

  1. Python版本: python3.6
  2. 调试工具:pycharm 2017.1.3
  3. 电脑系统:Windows 10 64位系统

生成数据

from random import randint
data = {x: randint(60, 100) for x in 'xyzabcd'}
print(data)
{'x': 64, 'y': 61, 'z': 74, 'a': 99, 'b': 98, 'c': 62, 'd': 69}

按照值排序

直接使用sorted

from random import randint
data = {x: randint(60, 100) for x in 'xyzabcd'}
print(data)
print(sorted(data))
{'x': 97, 'y': 67, 'z': 62, 'a': 92, 'b': 67, 'c': 90, 'd': 80}
['a', 'b', 'c', 'd', 'x', 'y', 'z']

发现只是对键排序了,并没有对值排序

使用zip将数据转化为元祖排序

from random import randint
# 生成数据
data = {x: randint(60, 100) for x in 'xyzabcd'}
print(data)
# 使用zip将字典打包成元祖并排序
res = sorted(zip(data.values(), data.keys()))
print(res)
{'x': 67, 'y': 94, 'z': 66, 'a': 71, 'b': 98, 'c': 63, 'd': 69}
[(63, 'c'), (66, 'z'), (67, 'x'), (69, 'd'), (71, 'a'), (94, 'y'), (98, 'b')]

传递sorted函数key参数

from random import randint
# 生成数据
data = {x: randint(60, 100) for x in 'xyzabcd'}
print(data)
# 传递sorted函数key参数
res1 = sorted(data.items(), key=lambda x: x[1])
print(res1)
{'x': 90, 'y': 98, 'z': 84, 'a': 78, 'b': 72, 'c': 96, 'd': 99}
[('b', 72), ('a', 78), ('z', 84), ('x', 90), ('c', 96), ('y', 98), ('d', 99)]
### Python字典的进阶用法 在Python中,字典是一种非常强大的数据结构,它允许以键值对的形式存储数据。以下是一些关于字典的进阶用法,这些技巧可以帮助开发者更高效地使用字典[^2]。 #### 1. 默认字典(`defaultdict`) `collections.defaultdict` 是 `collections` 模块中的一个类,它为字典提供了一个默认值,避免了在访问不存在的键时抛出异常的情况。 ```python from collections import defaultdict # 创建一个默认值为列表的字典 dd = defaultdict(list) dd['a'].append(1) dd['a'].append(2) print(dd) # 输出: defaultdict(<class 'list'>, {'a': [1, 2]}) ``` #### 2. 嵌套字典 嵌套字典是指在一个字典中包含另一个字典作为其值。这种结构非常适合表示多维数据。 ```python nested_dict = { 'user1': {'name': 'Alice', 'age': 25}, 'user2': {'name': 'Bob', 'age': 30} } print(nested_dict['user1']['name']) # 输出: Alice ``` #### 3. 字典推导式 字典推导式是生成字典的一种简洁方式,类似于列表推导式。 ```python squares = {x: x**2 for x in range(5)} print(squares) # 输出: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} ``` #### 4. 使用`setdefault`方法 `setdefault` 方法可以用来设置默认值,如果键不存在则添加该键,并返回默认值。 ```python d = {} d.setdefault('key', []).append('value') print(d) # 输出: {'key': ['value']} ``` #### 5. 合并字典Python 3.5及以上版本中,可以使用解包操作符 `**` 来合并两个字典。 ```python dict1 = {'a': 1, 'b': 2} dict2 = {'b': 3, 'c': 4} merged_dict = {**dict1, **dict2} print(merged_dict) # 输出: {'a': 1, 'b': 3, 'c': 4} ``` #### 6. 字典视图对象 从Python 3开始,字典的 `.keys()`、`.values()` 和 `.items()` 方法返回的是视图对象,而不是列表。这使得它们更加高效。 ```python d = {'a': 1, 'b': 2} keys_view = d.keys() print(keys_view) # 输出: dict_keys(['a', 'b']) ``` #### 7. 字典排序 可以通过 `sorted()` 函数对字典进行排序,通常是对键或值进行排序。 ```python d = {'apple': 10, 'orange': 20, 'banana': 5} sorted_d = dict(sorted(d.items(), key=lambda item: item[1])) print(sorted_d) # 输出: {'banana': 5, 'apple': 10, 'orange': 20} ``` ### 总结 以上列举了Python字典的一些进阶用法,包括 `defaultdict`、嵌套字典字典推导式、`setdefault` 方法、合并字典字典视图对象以及字典排序等。这些技巧能够帮助开发者更灵活地处理字典数据结构[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值