你绝对猜不到解决这个问题的最简洁的方法...
编码挑战
挑战:给出一个有字符串键的字典。获取具有最大字符数的字符串键,即最长的字符串。
这个问题的一个变种是获得最长的字符串的长度--我也会给你一个快速简单的解决方案。但首先,我们接下来看看一个例子,好吗?
假设,你有一个带有字符串键的字典。
d = {'alice': 18,
'bob': 23,
'carl': 35,
'david': 42}
Desired Output:这个挑战有两个变种。
- 获取最长的字符串,即
'alice'或'david'。 - 获得最长的字符串的长度,即:
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