簡體   English   中英

根據另一個列表對 Python 中的字典列表進行排序

[英]Sort list of dictionaries in Python according to another list

我有一個字典列表:

a = [{"id": 5, "data": "data1"}, {"id": 2, "data": "data2"}, {"id": 10, "data": "data3"}, {"id": 121, "data": "data4"}]

和 ID 列表:

ids_order = [10, 2, 5, 121]

我想重新排序我的字典列表a以便我的新列表new_a在列表ids_order之后具有鍵“id”的值的字典:

new_a = [{"id": 10, "data": "data3"}, {"id": 2, "data": "data2"}, {"id": 5, "data": "data1"}, {"id": 121, "data": "data4"}]

有沒有一種有效的方法來使用 function 排序? 到目前為止,我正在制作一個雙循環來獲得正確的元素,這並不是最好的。 但是,我找不到任何可以與排序 function 匹配的東西。

您可以將 ids temp映射到字典,以后可以根據給定的順序將其用於 select。

temp = {d["id"]: d for d in a}
new_a = [temp[i] for i in ids_order]
print(new_a)

Output:

[{'id': 10, 'data': 'data3'}, {'id': 2, 'data': 'data2'}, {'id': 5, 'data': 'data1'}, {'id': 121, 'data': 'data4'}]
ids_order = [10, 2, 5, 121]    
int_order = [a[i]['id'] for i in range(4)]
ind_change = [int_order.index(ids_order[i]) for i in range(4)]

new_a = [a[i] for i in ind_change]
print(new_a)

我通過制作一個嵌套的理解列表解決了這個問題。 它有效,但我不知道它是否可以通過大列表進行擴展。

new_a = [[feat for feat in a if feat["id"] == i][0] for i in ids_order]

注意:有[0]可以避免列表列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM