Python-如何获取dictionary值的最大长度?没有lambda



假设我有这个函数:

def frequent_base(self):
dict = {}    
for i in range(len(self.items)):
if self.items[i].base not in dict:
dict[self.items[i].base] = [(self.items[i].value)]
else:
dict[self.items[i].base] += [(self.items[i].base)]
return max(len(dict[self.items]), key=len(d))

现在,我可以让它变得复杂,并构建一个函数,返回索引等
但这是一个糟糕的编码和坏习惯,需要很长时间(尤其是在测试中(
如何计算长度
假设我有:
key1,长度为3的值(key1有3个值(
key2,长度为4的值(key 2有4个值(
key3,长度为2的值(key 3有2个值(

我该怎么取,不是键本身,不是值本身,而是键的值的长度?在这种情况下是4
或者如何获取密钥本身,然后说出该密钥的值的长度?但我想用Max函数,我需要了解如何用好这个函数,用这个键。

我会写并让自己超级清楚:

dict[1] = [1,2,3]  
dict[2] = [1,2,3,4,5]  
dict[3] = [1,2,3,7,8,9,10]   
dict = {1: [1,2,3], 2:[1,2,3,4,5], 3:[1,2,3,7,8,9,10]}

我希望返回的不是dict[3],不是3,也不是dict[3]本身的列表
我想返回dict[3]的长度,它是7


def frequency_base(self(:dict={}对于范围内的i(len(self.items((:if self.items[i].base不在dict中:dict[self.items[i].base]=[(self.items[i].value(]else:
dict[self.items[i].base]+=[(self.items[i].base(]def key_for_len(字典(:返回字典[1]return max(dict.items((,key=key_for_len(

我收到错误

您似乎只需要字典值中的最大长度。使用d.values()可以很容易地获得所有值(d.items()会给你(key, value)元组,这很难比较(。现在,我们可以使用生成器理解(非常像列表理解,它也可以工作(-len(v) for v in d.values()轻松地计算每个值的长度。现在我们有了一个具有所有长度的迭代,所以这只是一个找到最大值的问题-

max(len(v) for v in d.values())

如果你需要获得具有最大长度的键或值,我们必须采取稍微不同的方法-我们可以使用maxkey =参数来指定如何决定可迭代中的哪个元素是最大的-当我们试图从几个数字中获得最大值时,这是显而易见的,但当我们试图决定(1, 3)是否大于(2, 2)时,我们需要创建一个函数,将我们的项目映射到容易比较的东西,比如数字。在这种情况下,我们将有(key, value)的元组,并且我们正在比较值的长度,因此我们的函数将是

def lenOfValue(kv):
return len(kv[1]) # kv[1] - 2nd element of a (key, value) tuple

代码(1(

然后我们将其传递给最大值:

print(max(d.items(), key = lenOfValue))

我们得到(2, [3, 4, 5, 6])

奖金:lambda

Lambdas可以在这里使用,它实际上只是一种简写,可以让我们跳过定义另一个可能永远不会再使用的函数。这个代码在功能上完全相同。

print(max(d.items(), key = lambda kv: len(kv[1])))

代码(2(

Lambdas并不是很复杂,它只是一种用于创建简单的单行函数的符号,而不需要def块、return等。因为Python的函数和其他函数一样都是对象,所以这段代码:

lenOfValue = lambda kv: len(kv[1])

实际上与我们之前使用的更冗长的定义没有任何不同:

def lenOfValue(kv):
return len(kv[1])

它为我们节省了几个单词,并向我们展示了代码(1(和代码(2(之间的中间步骤。

a_dict = {'some_key':[67,30,10], 'another_key':[87]}

max({ (k,len(v)) for k,v in a_dict.items() })
('some_key', 3)

最新更新