gpt4 book ai didi

python - 按另一个列表的排序顺序对列表进行排序

转载 作者:行者123 更新时间:2023-11-28 22:37:50 24 4
gpt4 key购买 nike

我有一本像这样的字典:

{'sortingOrder': ['da','ub','ac','rd'], 'listToSort': [{_id:'ub'}, {_id: 'da'}, {_id: 'rd'}, {_id: 'ac'}]}

我想对这个列表进行排序,以便 listToSort 中的 id 与 sortingOrder 的排序方式相匹配

[{_id:'da'}, {_id: 'ub'}, {_id: 'ac'}, {_id: 'rd'}] 

我必须将 listToSort 的值与 sortingOrder 的值进行比较,并相应地对 listToSort 进行排序,这是我的主要问题。

id 可以是任何类型的字符,只需要按照 sortingOrder 的排序方式进行排序即可。

我必须按章节标题排序的文件示例:

{
"storeOrder": ["produce", "bread", "spreads", "deli", "dairy"],
"itemList": [
{
"_id": 9,
"amountNumber": 1,
"amountStr": "2 loaves",
"amountUnits": null,
"estPrice": null,
"listId": 3,
"modified": "2010-10-26 18:11:58",
"name": "white bread",
"notes": null,
"price": null,
"section": "bread",
"status": 1
},
{
"_id": 12,
"amountNumber": 1,
"amountStr": "1 jar",
"amountUnits": null,
"estPrice": null,
"listId": 3,
"modified": "2010-10-26 18:11:58",
"name": "raspberry jam",
"notes": "large bottle",
"price": null,
"section": "spreads",
"status": 0
}
}

最佳答案

你可以制作一个中间字典映射索引到字符串,并使用它来对 id 列表进行排序:

d1 = {'sortingOrder': ['da','ub','ac','rd'], 'listToSort': [{"id":'ub'}, {"id": 'da'}, {"id": 'rd'}, {"id": 'ac'}]}

l = d1['listToSort']

sort_keys = {s: i for i, s in enumerate(d1["sortingOrder"])}

print(sorted(l, key=lambda d: sort_keys[d["id"]]))
[{'id': 'da'}, {'id': 'ub'}, {'id': 'ac'}, {'id': 'rd'}]

l 中的字典将按照它们的值在 "sortingOrder" 列表中出现的位置排序。

如果您想就地对列表进行排序,以便对原始列表进行排序,只需使用list.sort:

  l.sort(key=lambda d: sort_keys[d["id"]])

如果您想按名称打破实际数据中的联系,请使用名称作为辅助键进行排序:

   key=lambda d: (sort_keys[d["id"]], d["name"])

关于python - 按另一个列表的排序顺序对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36162193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com