Как распаковать результат zip, который может оказаться пустым? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть генератор кортежей, который я хочу использовать следующим образом:

def pairs():
    yield from [("key1", 2), ("key2", 4), ("key3", 6)]

keys, values = zip(*pairs())

Работает как шарм, но теперь pairs() также не может дать ничего, что приведет к выражению, эквивалентному

keys, values = []

Можно ли заставить вывод zip иметь заданное измерение в красивом единственном выражении?

Я бы хотел иметь что-то вроде этого:

>>> keys, values = magic_extender(zip(*pairs()), 2)
>>> keys, values
((), ())

1 Ответ

2 голосов
/ 30 мая 2020

Моя Python версия (3.7)

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

решение

def pairs():
    """
    documentation of the function.

    Returns
    -------
        dict
            The function returns dictionary...
    """
    yield {"key1": 2, "key2": 4, "key3": 6}


def main():
    pair = dict(next(pairs()))
    keys, values = list(pair.keys()), list(pair.values())
    print(keys, values)


if __name__ == '__main__':
    main()

В этом решении вывод будет:

['key1', 'key2', 'key3'] [2, 4, 6]

, и если словарь пуст, вывод будет:

[] []
...