...out_dict[k] still contains elements that have been processed.
- Непонятно, какова цель вашего примера, поэтому решение будет невозможно.На первый взгляд это выглядит как логическая проблема.
Оставляя в стороне асинхронное:
>>> in_dict = collections.defaultdict(list)
>>> out_dict = collections.defaultdict(list)
Код всегда делает k:v
элемент в in_dict
первый
>>> k, v = 1, ''
>>> in_dict[k].append(v)
Такif k in in_dict and in_dict[k]
всегда будет True
, а набор elif
никогда не будет выполнен.
>>> k in in_dict
True
>>> bool(in_dict[k])
True
>>>
>>> if k in in_dict and in_dict[k]:
... out_dict[k] = out_dict[k] + in_dict.pop(k)
... elif k in out_dict:
... print(f'elif executed: {out_dict.pop(k)}')
>>> in_dict
defaultdict(<class 'list'>, {})
>>> out_dict
defaultdict(<class 'list'>, {1: ['']})
Далее вызов
>>> k,v = 1,'q'
>>> in_dict[k].append(v)
>>>
>>> if k in in_dict and in_dict[k]:
... out_dict[k] = out_dict[k] + in_dict.pop(k)
... elif k in out_dict:
... print(f'elif executed: {out_dict.pop(k)}')
>>>
>>> in_dict
defaultdict(<class 'list'>, {})
>>> out_dict
defaultdict(<class 'list'>, {1: ['', 'q']})
>>>
Оператор if