让我们把它分开。
1) 假设你有一个 dict,di:
di={'one': 1, 'two': 2, 'three': 3}
2) 现在假设您想要它的每个键值对:
>>> di.items()
[('three', 3), ('two', 2), ('one', 1)]
3) 现在你想对它们进行排序(因为 dicts 是无序的):
>>> sorted(di.items())
[('one', 1), ('three', 3), ('two', 2)]
请注意,元组是按字典顺序排序的——按元组第一个元素中的文本。这相当于一系列元组的t[0]。
假设您希望它按数字排序。你会使用key 函数吗:
>>> sorted(di.items(), key=lambda t: t[1])
[('one', 1), ('two', 2), ('three', 3)]
你有sorted(aDict.items(), key=lambda _: _[0]) 的语句只是使用_ 作为变量名。它也不做任何事情,因为aDict.items() 产生元组,如果你没有使用键,它无论如何都会按元组的第一个元素排序。您示例中的关键功能完全没用。
可能需要考虑表单的用例(元组除外)。如果您有字符串,那么您将按第一个字符排序并忽略其余字符:
>>> li=['car','auto','aardvark', 'arizona']
>>> sorted(li, key=lambda c:c[0])
['auto', 'aardvark', 'arizona', 'car']
对比:
>>> sorted(li)
['aardvark', 'arizona', 'auto', 'car']
但是,我仍然不会在 lambda 中使用 _。 _ 的使用是用于副作用可能性最小的一次性变量。 Python 有命名空间,主要是让这种担心不再是真正的担心。
考虑:
>>> c=22
>>> sorted(li, key=lambda c:c[0])
['auto', 'aardvark', 'arizona', 'car']
>>> c
22
c 的值由于lambda 内的本地命名空间而得以保留。
然而(在 Python 2.x 而非 Python 3.x 下)这可能是个问题:
>>> c=22
>>> [c for c in '123']
['1', '2', '3']
>>> c
'3'
因此,(轻量级)约定变成了在列表理解或元组扩展等情况下对变量使用_,在这种情况下,您不必担心践踏您的名字。消息是:如果它被命名为_,我真的不在乎它,除了这里......