首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对字典中有列表的字典排序?

如何对字典中有列表的字典排序?
EN

Stack Overflow用户
提问于 2021-03-03 09:03:24
回答 4查看 88关注 0票数 1

我在python中有以下字典:

代码语言:javascript
复制
dictionaryofproduct={
    "name":["Magnetic Adsorption Aluminum Bumper Case For Samsung Note 8","ESET Nod32 Antivirus"],
    "price":[1200,212]
}

我想按升序订单上的价格列表对字典进行排序,如下所示:

代码语言:javascript
复制
dictionaryofproduct={
    "name":["ESET Nod32 Antivirus","Magnetic Adsorption Aluminum Bumper Case For Samsung Note 8"],
    "price":[212,1200]
}

如何使用python实现这一点?

事先谢谢你

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2021-03-03 09:14:26

在排序操作期间,您需要将价格和名称放在一起。这可以通过将它们组合到一个元组列表(从价格开始)来实现,然后将它们排序并分配回字典条目:

代码语言:javascript
复制
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]}

注意:我添加了一个“其他”产品,以清楚地表明产品名称不仅仅是按字母顺序排序的。

另一种方法是编写两个助手函数,以获取并将排序从一种类型应用到相同大小的多个列表:

代码语言:javascript
复制
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)

顺便说一句,如果您没有致力于这个数据结构,那么您应该考虑将其更改为元组列表,或者将每个产品的名称和价格放在一起的字典列表,而不是依赖名称和价格处于相同的索引。如果你想使用这种模型的话,你也可以看看熊猫/数据。

票数 3
EN

Stack Overflow用户

发布于 2021-03-03 09:19:40

下面是一个使用价格作为列表来查找排序的版本。

代码语言:javascript
复制
initial_price = dictionaryofproduct['price'] # backup
dictionaryofsortedproduct = {key: [v for _, v in sorted(zip(initial_price, value))] for key, value in dictionaryofproduct.items()}

其思想是在键/值上迭代,并使用初始价目表压缩值。

票数 1
EN

Stack Overflow用户

发布于 2021-03-03 09:30:21

您可以使用此示例来实现以下目标:

代码语言:javascript
复制
dictionaryofproduct={
    "name":["Magnetic Adsorption Aluminum Bumper Case For Samsung Note 8","ESET Nod32 Antivirus"],
    "price":[1200,212]
}

pair = zip(dictionaryofproduct.get("name"), dictionaryofproduct.get("price"))
dictionaryofproduct["name"] = [item[0] for item in sorted(pair, key=lambda x: x[1])]
dictionaryofproduct["price"].sort()
print(dictionaryofproduct)

通过压缩两个键的值,使单个名称对应于单个价格。

  • 使用 sorted ()函数根据价格(即第二个参数(X1))对压缩后的值进行排序,并获取排序后的名称。

  • 最后也对原始价格进行排序。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66453810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档