python - 如何对里面有列表的字典进行排序?
问题描述
我在python中有以下字典:
dictionaryofproduct={
"name":["Magnetic Adsorption Aluminum Bumper Case For Samsung Note 8","ESET Nod32 Antivirus"],
"price":[1200,212]
}
我想按升序的价格列表对字典进行排序,如下所示:
dictionaryofproduct={
"name":["ESET Nod32 Antivirus","Magnetic Adsorption Aluminum Bumper Case For Samsung Note 8"],
"price":[212,1200]
}
如何使用 python 实现这一点?
先感谢您
解决方案
在排序操作期间,您需要将价格和名称放在一起。这可以通过将它们组合在您排序的元组列表(从价格开始)中然后分配回字典项来实现:
dictionaryofproduct={
"name":["Magnetic Adsorption Aluminum Bumper Case For Samsung Note 8","ESET Nod32 Antivirus","Other"],
"price":[1200,212,500]
}
prices,names = zip(*sorted(zip(dictionaryofproduct["price"],dictionaryofproduct["name"])))
dictionaryofproduct["price"] = list(prices)
dictionaryofproduct["name"] = list(names)
print(dictionaryofproduct)
{'name': ['ESET Nod32 Antivirus', 'Other', 'Magnetic Adsorption Aluminum Bumper Case For Samsung Note 8'],
'price': [212, 500, 1200]}
注意:我添加了一个“其他”产品以清楚地表明产品名称不只是按字母顺序排序
另一种方法是编写两个辅助函数来获取排序并将排序从一个排序应用于多个相同大小的列表:
def getSortOrder(L,key=lambda v:v):
return sorted(range(len(L)),key=lambda i:key(L[i]))
def applySortOrder(L,order): L[:] = [L[i] for i in order]
orderByPrice = getSortOrder(dictionaryofproduct["price"])
applySortOrder(dictionaryofproduct["price"], orderByPrice)
applySortOrder(dictionaryofproduct["name"], orderByPrice)
顺便说一句,如果您不致力于此数据结构,您应该真正考虑将其更改为元组列表或将每个产品的名称和价格保持在一起的字典列表,而不是依赖名称和价格处于相同的索引. 如果您想使用这种模型,也可以查看 pandas/dataframes。
推荐阅读
- python - 如何在python中使用空行结束程序?
- html - 如何在html中的单选按钮前面创建一个颜色框?
- python - Python:如何在“for”循环中的某些条件后修改迭代器值
- php - 如何使用 eloquent 访问 laravel 中的表与未直接附加
- regex - 正则表达式逗号分隔字符串中的子字符串
- java - 让 Thymeleaf th:field 使用 Lombok 生成的布尔 getter
- c# - 如何找到带有特定父级子级标签的游戏对象?
- c# - Razor 组件 - 级联参数值
- flutter - 如何删除 Hive Flutter 中的所有框?
- c# - 将一个点数组拆分为多个彼此具有特定距离的数组