以下find_longest
类中的dict
方法在字典中找到最长的键值。
class LongestKey(dict):
def find_longest(self):
longest = None
for key in self:
if not longest or len(key) > len(longest):
longest = key
print(key)
a = LongestKey()
a["hi"] = 1
a["hello"] = 2
a["hey there"] = 3
a["greetings sir"] = 4
a.find_longest()
代码正在运行,但是我很难理解if not或语句背后的逻辑。我原来用
if len(key) > len(longest):
代替
if not longest or len(key) > len(longest):
但是会产生错误:
TypeError: object of type 'NoneType' has no len()
。为什么是这样?非常感谢您的启发。 最佳答案
之所以需要if not longest
检查,是因为第一次运行循环时,longest
是None
,而您不能执行len(None)
。因此,您要进行if not longest
检查,并且仅当此值为False
时,才检查第二个条件。
在这种情况下,可以通过将longest
初始化为-1
而不是None
并将len(key)
与longest
(不是len(longest)
)进行比较来避免这种额外的检查。
像这样:
class LongestKey(dict):
def find_longest(self):
longest = -1
for key in self:
if len(key) > longest:
longest = len(key)
longest_key = key
print(longest_key) # <-- print longest key not just key.
注意:您的代码仅打印最后一个键,而每次可能都不是最长的键。在
if
中,您需要更新最长密钥以及longest
值,如图所示。关于python - 了解在字典中找到最长键的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53200912/