我指的是问题: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?因为我是lambdas的新手,所以我不明白这一部分。 key:
和mydict[key]
指的是什么?
在sorted(d, key=d.get)
d.get
所指的内容?如果我这样做:
>>> dict.get
<built-in method get of dict object at 0x1d27830>
答案 0 :(得分:4)
没有。字典按其键的哈希值排序,并且无法保证哈希算法不会在版本或实现之间发生变化。
lambda
和:
之间的所有内容都是参数。 :
之后的所有内容都是返回的表达式。
绑定到get
的对象的d
方法。在dict
个对象中,如果密钥存在,则返回值,否则返回默认值或None
。
答案 1 :(得分:4)
1- Dicts永远不会保证订单,有时它甚至可能看起来像,但是在那里得到足够的数字而你会发现它们没有(这是因为获得hashes的方式每个键)
2-这两个是相同的:
lambda key: mydict[key]
def temp_function(key):
return mydict[key]
基本上,您正在创建一个临时函数,该函数接收键作为参数,并返回 mydict [key]
3- 排序的第二个参数是指将被调用的函数,传递当前的dict键。此返回的值将用于确定已排序字典的顺序。
答案 2 :(得分:3)
首先,请避免调用变量dict
,因为您可以通过这种方式隐藏内置变量。
OrderedDict
模块中的collections
。
2)你应该把它读作一个匿名函数,给定一个输入参数key
,它将返回对象mydict[key]
。它等同于:
def foo(key):
# assume mydict is in scope
return mydict[key]
3)假设您的变量d
在这里是一个dict,它将在字典中返回 keys 的列表,这些 keys 按照{{>>的相应值排序1}}。这意味着函数d
在迭代时被调用为d.get()
,并且列表将按in d
的返回值而不是对象本身进行排序。