2017-10-21 132 views
0

这两个函数是否创建了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) 
+1

你知道'itemgetter'是如何工作的吗?在你的场景中,你指定'0'作为'itemgetter'的参数。它将返回按'f(lvls.items()[0])'排序的键,在这种情况下'f'是'v for k,v',因此它是基于'lvls.values()[0 ''反过来。希望对你有帮助 –

+1

@new_to_coding @new_to_coding你的方法基本上可以得到相同的结果,如果你试图用键来排序它们,比如1,2,3,在你的字典中一个非常不同的值的情况下,这两个排序后的调用可能会返回完全不同的序列。 –

+1

编号。这两种类型都完全忽略了'lvls'的关键字,并且只关注相关的值。第一个按每个值列表中的第一个项目排序,第二个使用每个值列表中的所有项目。顺便说一下,'lambda k:k'等价于默认的按键功能,只有较慢。 –

回答

1

itemgetter(0)0th索引获取项目。

在您的第一个案例中,您正在按相反顺序对v0th索引进行排序。所以基本上你在做的是按照相反顺序对[“t1”,“t2”],[“t3”,“t4”]和[“tdfgdf99”,“x99”]的0th索引进行排序。

在你的第二种情况下,你正在排序v这是列表值 - 基本上[["t1","t2"], ["t3, "t4"], ["tdfgdf99","x99"]]是相反的顺序。 lambda k: k的目的是你只是从这个列表中选择一个元素并返回。

相关问题