Используйте понимание списка, чтобы найти наибольшее значение int в kwargs, которые также содержат определенную подстроку - PullRequest
1 голос
/ 16 февраля 2020

Вот мой код, потому что я думаю, что проще объяснить, что я пытаюсь сделать, показав, что я делаю первым.

Скажем, это мои kwargs, переданные в функцию:

kwargs = {fastperiod=20, slowperiod=10, r=100}

Итак, я пытаюсь найти наибольшее значение kwargs, которые также содержат подстроку period. В этом случае это будет означать 20.

. В настоящее время я делаю это с:

periods = []
    for kwarg in kwargs:
        if 'period' in kwarg:
            periods.append(kwargs.get(kwarg))
    max_ = max(periods)

Что не очень кратко. Я чувствую, что должен быть способ достичь этого с помощью понимания списка.

Лучшее, что я могу придумать, это:

max_ = max([i for i in kwargs.get(i) if 'period' in i])

Но я получаю UnboundLocalError: local variable 'i' referenced before assignment

Я не уверен, как проверить, содержит ли kwarg точку, а затем вернуть присвоенное ему значение int одновременно.

Ответы [ 2 ]

1 голос
/ 16 февраля 2020

Это будет работать друг friend

kwargs = {'fastperiod':20, 'slowperiod':10, 'r':100}

max_ = max([kwargs[kwarg] for kwarg in kwargs if 'period' in kwarg])
1 голос
/ 16 февраля 2020

Используйте kwargs.items(), чтобы получить ключ и значение во время итерации.

max([v for k, v in kwargs.items() if "period" in k])
...