通过键值返回值列表的Python排序字典itemgetter
问题描述:
这两个函数是否创建了x
等效?我不明白为什么在这种情况下使用0
作为输入时,itemgetter似乎会返回正确的变量。通过键值返回值列表的Python排序字典itemgetter
itemgetter是否正确按字典键排序?它们都打印相同
from operator import itemgetter
lvls = {1: ["t1","t2"], 2: ["t3","t4"], 3: ["tdfgdf99","x99"]}
x = sorted((v for k,v in lvls.items()),key=itemgetter(0),reverse=True)
print (x)
x = sorted((v for k,v in lvls.items()),key=lambda k: k,reverse=True)
print (x)
答
itemgetter(0)
在0th
索引获取项目。
在您的第一个案例中,您正在按相反顺序对v
的0th
索引进行排序。所以基本上你在做的是按照相反顺序对[“t1”,“t2”],[“t3”,“t4”]和[“tdfgdf99”,“x99”]的0th
索引进行排序。
在你的第二种情况下,你正在排序v
这是列表值 - 基本上[["t1","t2"], ["t3, "t4"], ["tdfgdf99","x99"]]
是相反的顺序。 lambda k: k
的目的是你只是从这个列表中选择一个元素并返回。
你知道'itemgetter'是如何工作的吗?在你的场景中,你指定'0'作为'itemgetter'的参数。它将返回按'f(lvls.items()[0])'排序的键,在这种情况下'f'是'v for k,v',因此它是基于'lvls.values()[0 ''反过来。希望对你有帮助 –
@new_to_coding @new_to_coding你的方法基本上可以得到相同的结果,如果你试图用键来排序它们,比如1,2,3,在你的字典中一个非常不同的值的情况下,这两个排序后的调用可能会返回完全不同的序列。 –
编号。这两种类型都完全忽略了'lvls'的关键字,并且只关注相关的值。第一个按每个值列表中的第一个项目排序,第二个使用每个值列表中的所有项目。顺便说一下,'lambda k:k'等价于默认的按键功能,只有较慢。 –