下面的示例代码检索所有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'。 –