Python中如何对值为数组的字典按价格排序及相关问题咨询
问题解答
1. 实现按价格排序的方法
Python 3.7及以上版本的普通字典默认保留插入顺序,直接使用内置的sorted()函数即可实现按价格排序,排序规则取字典值(列表)的第三个元素(索引为2的价格字段)作为排序key,示例代码如下:
# 修正你原来的语法错误:变量定义不需要加{},正确写法如下 products = { '001':['001','Espreso',2.50], '002':['002', 'Latte',1.50], '003':['003', 'Orange Juice',1.00], '004':['003', 'Apple Juice',1.00], } # 按价格升序排序,直接转为普通字典即可保留顺序 sorted_products = dict(sorted(products.items(), key=lambda item: item[1][2])) # 打印验证结果 print(sorted_products)
如果你使用的是Python 3.6及更早版本,普通字典不保留顺序,需要导入collections.OrderedDict来存储排序结果:
from collections import OrderedDict sorted_products = OrderedDict(sorted(products.items(), key=lambda item: item[1][2]))
如果需要价格相同的情况下再按商品名称排序,可以把排序key改为lambda item: (item[1][2], item[1][1])即可。
2. 列表作为字典值的写法合法性
你原始代码里只有products{} = ...的写法是语法错误,正确的字典变量定义不需要加{}后缀,除此之外将列表作为字典的值是完全合法的:Python字典的值支持任意数据类型,包括列表、数字、字符串、甚至嵌套的字典/元组,这种赋值逻辑没有问题。
另外你原始数据里004对应的列表第一个元素写的是003,大概率是笔误,但是不影响排序逻辑的运行。
3. 结构是否为有序字典
分Python版本判断:
- Python 3.7及以上版本:你定义的普通字典默认就是有序结构,会严格保留键的插入顺序,排序后生成的普通字典也会保留排序后的顺序
- Python 3.6及以下版本:普通字典是无序结构,不会保留插入顺序,如果你需要保证顺序,必须显式使用
collections.OrderedDict类型
你给出的原始结构是普通字典,不是显式声明的OrderedDict,只要Python版本符合要求,就可以实现你要的有序排序效果。
内容的提问来源于stack exchange,提问作者rasul1719435
相关产品推荐
相关产品推荐

