我想根據另一個串列對一個串列進行排序。
示例:下面我想list_sec根據key這個串列進行排序,順序是從list_main.
list_main = [3, 33, 2]
list_sec = [{'key': 2, 'rocket': 'mark11'}, {'key': 332, 'rocket': 'mark23'}, {'key': 3, 'rocket': 'mark1'} ]
輸出如下。(解釋:第一個元素list_main是 3,所以key:3 應該到 index = 0,第二個值是 33,但是這個鍵丟失了list_sec所以會丟棄這個。第三個鍵是 2,所以接下來會出現。
output = [{'key': 3, 'rocket': 'mark1'}, {'key': 2, 'rocket': 'mark11'}]
我在類似的行中閱讀了幾個答案: Python, sort a list by another list , Python 3.x -- sort an list based on another list and then return both lists sorted
但沒有嘗試就卡住了。任何方式都可以做到這一點。
uj5u.com熱心網友回復:
sorted(list(filter(lambda data: data["key"] in list_main, list_sec)),
key=lambda data: list_main.index(data["key"]))
輸出:
[{'key': 3, 'rocket': 'mark1'}, {'key': 2, 'rocket': 'mark11'}]
uj5u.com熱心網友回復:
將您的 dicts 串列轉換為 dict,然后您將能夠按key.
In [2]: rocket_dict = {item['key']: item for item in list_sec}
In [3]: rocket_dict
Out[3]:
{2: {'key': 2, 'rocket': 'mark11'},
332: {'key': 332, 'rocket': 'mark23'},
3: {'key': 3, 'rocket': 'mark1'}}
如果您需要按特定順序列出的串列,您可以執行以下操作:
In [4]: output = []
In [5]: for key in list_main:
...: if key in rocket_dict:
...: output.append(rocket_dict[key])
...:
In [6]: output
Out[6]: [{'key': 3, 'rocket': 'mark1'}, {'key': 2, 'rocket': 'mark11'}]
uj5u.com熱心網友回復:
試試這個簡單的方法,它適用于你的情況
list_main = [3, 33, 2]
list_sec = [{'key': 2, 'rocket': 'mark11'}, {'key': 332, 'rocket': 'mark23'}, {'key': 3, 'rocket': 'mark1'} ]
sorted_list = [] # The final sorted list
for key in list_main: # iterate on each key
for item in list_sec:
if item['key'] == key: # find the item based on your key
sorted_list.append(item) # append in sequence
print(sorted_list) # your sorted list
uj5u.com熱心網友回復:
本質上是@LevLevitsky 的答案,但有串列理解
wrap_dict = {item['key']: item for item in list_sec}
output = [wrap_dict[key] for key in list_main if key in wrap_dict]
或者我們可以使用Python 3.8 中引入的最酷的海象運算子
output = [rkt_dict for key in list_main if (rkt_dict := wrap_dict.get(key))]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/491472.html
上一篇:根據超串列的順序對子串列進行排序
下一篇:葡萄-如何從回應中洗掉標題?
