Получить Макс. Len (строка) во вложенном словаре, если строка может быть None - PullRequest
1 голос
/ 19 февраля 2020

Я пытаюсь получить максимальную длину строки из вложенного словаря. Поле может быть строкой или нет.

При выполнении этого со списком из вложенного словаря работает следующее:

max_value = max(dict, key=lambda d: len(dict[d]["list_key"]))

Когда я запускаю это на строковое поле, код:

max_value = max(dict, key=lambda d: len(dict[d]["string_key"]))

, поскольку строка может быть None, я получаю следующую ошибку:

TypeError: object of type 'NoneType' has no len()

Как включить is not None во вторую функцию?

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

пожалуйста, не используйте python встроенный класс / тип для именования ваших переменных, вместо dict вы можете использовать my_dict:

max_value = max(my_dict, key=lambda k: len(my_dict[k]["string_key"] or ''))
2 голосов
/ 19 февраля 2020

Если вы настаиваете на одном лямбда-выражении, что-то вроде:

max_value = max(dict, key=lambda d: len(dict[d]["string_key"]) if dict[d]["string_key"] is not None else 0)

Однако это начинает выглядеть довольно грязно. Как насчет

strs = (dict[d]["string_key"] for d in dict)
maxlen = max(len(s) for s in strs if s is not None)
...