理解Python中的dictionary.get

时间:2016-09-14 17:07:18

标签: python dictionary

我正在sorting dictionaries阅读这篇非常有用的帖子。其中一个最受欢迎的答案表明了这一点:

sorted(dict1, key=dict1.get)

虽然这似乎完全正常,但我没有得到key=dict1.get部分。

这里get究竟是什么?它有什么作用?

我只熟悉使用get('X')从字典中提取X ... 我无法在docs上找到任何关于词典和stdtypes的内容,所以任何指针都非常感激!

这是theyget()所说的内容,或者这是完全不同的内容? 谢谢!

  

get(key [,default])   如果key在字典中,则返回key的值,否则返回default。如果未给出default,则默认为None,因此此方法永远不会引发KeyError

4 个答案:

答案 0 :(得分:7)

key的{​​{1}}参数是一个可调用的(例如一个函数),它接受一个参数。

默认情况下,sorted通过将值相互比较来对值进行排序。例如:

sorted

这是因为1< 2< 3。

另一方面,如果应使用不同的值进行比较,则可以使用sorted([2, 3, 1]) # returns [1, 2, 3] 来定义。例如,要按长度对字符串进行排序,请执行以下操作:

key

这是因为def string_length(s): return len(s) sorted(['abcd', 'efghi', 'jk'], key=string_length) # returns ['jk', 'abcd', 'efghi']

但是,您可以传递任何其他可调用,而不是功能。在您的示例中,即string_length('jk') < string_length('abcd') < string_length('efghi'),因此对于dict中的每个键,将执行dict1.get并将其结果用于比较。

dict1.get(key)

这是因为dict1 = {'a':3, 'b':1, 'c':2} sorted(dict1, key=dict1.get) # returns ['b', 'c', 'a']

答案 1 :(得分:3)

sorted(dict1, key=dict1.get)

是一种不那么冗长,更加抒情的说法:

sorted(dict1, key=lambda x: dict1[x] if x in dict1 else None)

请记住,迭代字典将返回其键,因此get方法接受作为字典键的参数,而字典键又返回键指向的值。

TL; DR这是一种简单的方法,可以使用值作为排序标准对字典键进行排序。

答案 2 :(得分:2)

如您所见,get只获取与给定密钥对应的值。 sorted将迭代它传递的迭代。在这种情况下,iterable是dict,并且迭代dict只是遍历其键。如果您想根据值进行排序,则需要将键转换为相应的值,当然,显而易见的方法是使用get

为了澄清这一点,如果你想要一个根据它们的值排序的键列表。如果您只想要一个排序的值列表,您可以sorted(dict1.values()),如果您希望按其值排序的键(而不是它们映射到的值),您可以sorted(dict1)

示例:

>>> d = {'a': 3, 'b': 2, 'c': 1}
>>> sorted(d)
['a', 'b', 'c']
>>> sorted(d.values())
[1, 2, 3]
>>> sorted(d, key=d.get)
['c', 'b', 'a']

答案 3 :(得分:1)

dict.get(x)的第二个参数是函数,而不是值:

这意味着该方法将根据应用于项目的函数返回的值来比较键。

函数调用后添加的括号表示传递值,而没有括号则传递函数

dict.get是dict中键x的值

d = {'a': 3, 'b': 2, 'c': 1} 是从dict1

获取所述值的函数

假设我们有

sorted(d)

sorted(d,d.get)会比较&#39;&#39;&#39;&#39;&#39; c&#39; d.get('a')会比较d.get('b')d.get('c')https://foo.bar.com/#/home