如何利用python查找字典中最长的字符串?

658 阅读3分钟

你绝对猜不到解决这个问题的最简洁的方法...🦄

编码挑战

💬 挑战:给出一个有字符串键的字典。获取具有最大字符数的字符串键,即最长的字符串。

这个问题的一个变种是获得最长的字符串的长度--我也会给你一个快速简单的解决方案。但首先,我们接下来看看一个例子,好吗?

假设,你有一个带有字符串键的字典。

d = {'alice': 18,
     'bob': 23,
     'carl': 35,
     'david': 42}

Desired Output:这个挑战有两个变种。

  1. 获取最长的字符串,即'alice''david'
  2. 获得最长的字符串的长度,即:5

接下来让我们来学习解决这个挑战的最Pythonic的方法!

方法1:获取Dict键中最长的字符串

要获得一个字典中最长的字符串键,请调用 max(dict, key=len).你把 dictionary 作为第一个参数传给它。Python 将自动从 dictionary 中检索键,而忽略 dictionary 的值。然后传递key=len 作为第二个参数,以比较字符串的长度,避免标准的词典式字符串比较。

这里有一个例子。

d = {'alice': 18,
     'bob': 23,
     'carl': 35,
     'david': 42}

print(max(d, key=len))
# 'al

💡 max() 函数的关键参数允许你重新定义 "最大 "的含义。在我们的例子中,最大意味着 "最长 "的字符串,而不是 "词典上最大 "的字符串。

如果没有这个参数,max() 函数在字符串列表中会返回词典上最大的字符串,即在字母表中排在最后的那个。

>>> max(['aaaaaaaa', 'z'])
'z'

方法2:获取Dict键中最长字符串的长度

要获得字典中最长字符串的长度,首先用max(dict, key=len) 找到最长的字符串,然后将得到的字符串传入len() 函数。

下面是这个例子。

d = {'alice': 18,
     'bob': 23,
     'carl': 35,
     'david': 42}

print(len(max(d, key=len)))
# 5

方法3:从Dict值中获取最长的字符串

要从所有的字典值中得到最长的字符串,请调用 max(dict.values(), key=len).你把字典中的值作为第一个参数传递。然后传递key=len 作为第二个参数,以比较字符串的长度,避免标准的词典式字符串比较。

这里有一个例子。

d = {1: 'a', 2: 'aaa', 3:'aa'}
print(max(d.values(), key=len))
# aaa

方法4:粗暴地使用纯Python

当我刚开始的时候,我一直在寻找我最理解的解决方案。我不推荐下面这个方案,它超级长--但至少它简单易懂,你应该只在你的项目中包含你理解的代码。

你可以通过在for循环中手动比较所有的字符串,从字典的键中找到最长的字符串,通过使用 [len()](https://blog.finxter.com/python-len/)函数和大于>

d = {'aaa':1, 'aaaa':2, 'a':3}

longest = ''
for s in d.keys():
    if len(s) > len(longest):
        longest = s

print('The longest string is: ', longest)
# The longest string is:  aaaa