下面是一個示例嵌套的字典串列。我想按查理擁有的點數對串列進行排序。
l = [[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20 },
{'Name': 'Charlie', 'Age': 30, 'Point': 10}],
[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20 },
{'Name': 'Charlie', 'Age': 30, 'Point': 30}],
[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20 },
{'Name': 'Charlie', 'Age': 30, 'Point': 20}]]
輸出應如下所示。
l = [[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20 },
{'Name': 'Charlie', 'Age': 30, 'Point': 10}],
[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20 },
{'Name': 'Charlie', 'Age': 30, 'Point': 20}],
[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20 },
{'Name': 'Charlie', 'Age': 30, 'Point': 30}]]
我想我應該能夠使用 sorted() 和正確的引數,但我不確定語法是什么。
sorted(l, key=lambda x: x[ ????? ])
Charlie 始終是子串列中的第三項。
uj5u.com熱心網友回復:
使用 lambda 在嵌套串列中搜索 Charlie 的點:
l.sort(key=lambda lst: next(d.get('Point', 0) for d in lst if d.get('Name')=='Charlie'))
print(l)
如果你想要一個新串列:
out = sorted(l, key=lambda lst: next(d.get('Point', 0) for d in lst if d.get('Name')=='Charlie'))
輸出:
[[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20},
{'Name': 'Charlie', 'Age': 30, 'Point': 10}],
[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20},
{'Name': 'Charlie', 'Age': 30, 'Point': 20}],
[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20},
{'Name': 'Charlie', 'Age': 30, 'Point': 30}]]
uj5u.com熱心網友回復:
與@enke 的答案非常相似,但next用于提供默認值0,而不是get方法。
s = sorted(l, key=lambda lst: next((d['Point'] for d in lst if d['Name'] == 'Charlie'), 0))
uj5u.com熱心網友回復:
如果查理總是第三,你可以使用這個:
sorted(l, key=lambda x: x[2]['Point'])
否則,您需要使用輔助函式:
def get_charlie_points(lst):
for item in lst:
if item['Name'] == 'Charlie':
return item['Point']
return 0 # Replace this with the number you want if there is no Charlie, or raise an exception
sorted(l, key=get_charlie_points)
uj5u.com熱心網友回復:
如果查理總是第三,保持簡單,使用:
out = sorted(l, key=lambda x:x[2].get('Point', float('inf')))
注意。如果查理沒有積分,我使用默認值無限,將其推到最后。
輸出:
[[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20},
{'Name': 'Charlie', 'Age': 30, 'Point': 10}],
[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20},
{'Name': 'Charlie', 'Age': 30, 'Point': 20}],
[{'Name': 'Alice', 'Age': 40, 'Point': 80},
{'Name': 'Bob', 'Age': 20},
{'Name': 'Charlie', 'Age': 30, 'Point': 30}]]
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/419948.html
標籤:
上一篇:Intellij代碼檢查如何決定.css檔案中的選擇器?
下一篇:生成PDFVBA時洗掉列
