排序字典的方法
我在说的是这个问题:https://stackoverflow.com/a/575889/292291
如果我用整数作为键,难道就一定能保证排序吗?
>>> dict = { 2: "list 2", 0: "list 0", 1: "list 1" } >>> dict {0: 'list 0', 1: 'list 1', 2: 'list 2'}
在
sorted(mydict, key=lambda key: mydict[key])
这段代码中,我该怎么理解或阅读这个 lambda 表达式?我对 lambda 还不太了解,这部分我不太明白。这里的key:
和mydict[key]
是指什么呢?在
sorted(d, key=d.get)
中,d.get
是指什么?如果我这样做:>>> dict.get <built-in method get of dict object at 0x1d27830>
3 个回答
首先,请避免把变量命名为 dict
,这样会覆盖掉Python自带的这个名字。
1) 我不这么认为。如果你想要一个有序的字典,可以直接使用 OrderedDict
,它在 collections
模块里。
2) 你可以把它理解为一个匿名函数,它接收一个输入参数 key
,然后返回 mydict[key]
这个对象。这相当于:
def foo(key):
# assume mydict is in scope
return mydict[key]
3) 假设你这里的变量 d
是一个字典,它会返回一个列表,列表里的内容是字典中的 键,这些键是根据它们对应的 值 从 d
中排序的。这意味着在遍历的时候,会调用 d.get()
函数来获取 d
中每个元素的值,然后根据这些返回值来排序,而不是根据对象本身来排序。
不,字典是根据它们的键的哈希值来排序的,所以不同版本或不同实现之间,哈希算法可能会改变,这样就不能保证顺序。
在
lambda
和:
之间的部分是参数,:
后面的部分是返回的结果。这是与
d
绑定的对象的get
方法。在dict
对象中,如果键存在,它会返回对应的值;如果键不存在,则返回你传入的默认值或者None
。
1- 字典(Dicts)并不保证顺序,有时候看起来好像有顺序,但如果你放入足够多的数字,就会发现其实没有顺序。这是因为字典是通过一种叫做哈希的方式来处理每个键的。
2- 这两个是一样的:
lambda key: mydict[key]
def temp_function(key):
return mydict[key]
简单来说,你是在创建一个临时函数,这个函数接收key作为参数,然后返回mydict[key]的值。
3- sorted的第二个参数是指要调用的函数,这个函数会传入当前字典的键。这个函数返回的值将用来决定你排序后的字典的顺序。