为什么min()调用对字典有效

时间:2019-10-08 19:34:36

标签: python

我正在尝试查找字典中最小元素的键。

sentence: 1, Opposition MP Namal Rajapaksa questions Environment Ministe [...] Sirisena over Wilpattu deforestation issue.
sentence: 2, but he should remember that it all started with his dad and [...] a coma in that days .
sentence: 3, Opposition MP Namal Rajapaksa questions Environment Ministe [...] Sirisena over Wilpattu deforestation issue.
sentence: 4, Pawu meya ba ba meyage  [...] 
sentence: 5, We visited Wilpaththu in August 2013 These are some of the  [...] deforestation of Wilpattu as Srilankans .
sentence: 6, Mamath wiruddai .
sentence: 7, Yeah we should get together and do something.
sentence: B, Mama Kamathyi oka kawada hari wenna tiyana deyak .
sentence: 9, Yes Channa Karunaratne we should stand agaist this act dnt  [...] as per news spreading Pls .
sentence: 10, LTTE eken elawala daapu oya minissunta awurudu 30kin passe [...] sathungena balaneka thama manussa kama .
sentence: 11, Shanthar mahaththayo ow aththa eminisunta idam denna one g [...] vikalpa yojana gena evi kiyala.
sentence: 12, You are wrong They must be given lands No one opposes it W [...]

我应该以'a'作为键。

我找到了这段代码,但是我不太确定它是如何工作的。

dictionary = {'a': 5, 'b': 7, 'c': 8}

当我假设def key_of_min_value(d): print(min(d, key=d.get)) 部分说它正在获取字典中的最小元素时,我对key = d.get的含义感到困惑。

2 个答案:

答案 0 :(得分:2)

“键”一词在这里有点重载。传递给min的键(即d.get)是可调用的,用于在比较之前转换值。内置函数key有一个类似的sorted参数。

此“键”与在引用字典的键/值时使用的“键”一词无关。

因此,代码可以通过迭代在k最小的字典中找到d.get(k)来工作。

答案 1 :(得分:1)

摘自min的文档:

  

min(arg1,arg2,* args [,key])

     
    

返回可迭代的最小项或两个或多个参数中的最小项。     如果提供了一个位置参数,则它应该是可迭代的。返回iterable中的最小项。如果提供了两个或多个位置参数,则返回最小的位置参数。

         

有两个可选的仅关键字参数。 key参数指定一个单参数排序函数,例如用于list.sort()的函数。默认参数指定在提供的iterable为空时要返回的对象。如果iterable为空且未提供默认值,则会引发ValueError。

  

重要的是要了解min通过遍历参数进行操作,并且(未指定键)返回“最低”的排序值。与<, >, etc.运算符进行了比较。当您将可调用对象传递为key时,各个元素将用作此函数的参数。

要进一步分解,这是(或多或少)您致电min(d, key=d.get)时发生的事情:

lowest_val = None
lowest_result = None
for item in d:
    if lowest_val is None or d.get(item) < lowest_val:
        lowest_val = d.get(item)  # These are the elements we are comparing
        lowest_result = item  # But this is the element we are 'returning'
print(f"The min value (result of the callable key) is '{lowest_val}'")
print(f"The min item corresponding to the min value is '{lowest_result}'")

注意,我们不会比较每个item,但是当将item用作参数时,我们将比较可调用键的结果。