下面的示例代碼檢索所有runing procces並打印它們。 他們在第三個示例here之後寫了一個蜜蜂,最後一個從here開始。問題是我無法弄清楚爲什麼只有第一個按照需要檢索進程。Python lambda函數根據字典對列表進行排序
我認爲它與lambda
函數構造有關。但正確運行的樣本,第一個似乎將for語句的當地p
變量與p.dict
字典混合在一起,這讓我陷入了困境。
第一樣品:
import psutil
procs = []
for p in psutil.process_iter():
try:
p.dict = p.as_dict(['pid', 'name'])
except psutil.NoSuchProcess:
pass
else:
procs.append(p)
processes = sorted(procs, key=lambda p: p.dict['name'], reverse=False)
print(processes)
第二樣品:
import psutil
procs = []
for proc in psutil.process_iter():
try:
procs_dic = proc.as_dict(['pid', 'name'])
except psutil.NoSuchProcess:
pass
else:
procs.append(proc)
processes = sorted(procs, key=lambda ordem: procs_dic['name'], reverse=False)
print(processes)
事實上,我改變倒數第二行到'過程=排序(特效,鍵=拉姆達ORDEM:ordem.dict [ '名稱'],反向=假)',以下@JordanMcQueen小費。然而,我只能在'try'後改成'proc.dict = proc.as_dict(['pid','name'])'這一行後才能完成任務。 –
對。因此,在完成之後,您的代碼與第一個代碼段中的代碼完全相同*除了*,您已將名爲'p'的變量之一重命名爲'proc',另一個變爲'ordem'。 –