以下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检查,是因为第一次运行循环时,longestNone,而您不能执行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/

10-13 07:13