Альтернатива Python> = 3.5: розпакуйте в літеральний список [*newdict]
З Python 3.5 було введено нові розпаковувальні узагальнення (PEP 448), що дозволяють тепер легко робити:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
Розпаковуючи *роботи з будь-яким об'єктом, який є ітерабельним, і оскільки словники повертають свої ключі під час повторення, ви можете легко створити список, використовуючи його в списку, що знаходиться в прямому списку.
Додавання, .keys()тобто, [*newdict.keys()]може допомогти зробити ваш намір дещо більш явним, хоча це коштуватиме пошуку функції та виклику функції. (що, чесно кажучи, не те, про що ви дійсно повинні турбуватися).
*iterableСинтаксис аналогічний робити list(iterable)і його поведінка була спочатку зафіксовано в розділі Виклики на Python Довідкове керівництво. З PEP 448 обмеження на те, де *iterableможе з'явитись, було послаблено, що дозволило також розміщувати його у списках, наборах та кортежах літералів, довідковий посібник зі списків виразів також був оновлений, щоб вказати це.
Хоча це еквівалентно list(newdict)з тією різницею, що це швидше (принаймні, для невеликих словників), оскільки фактично не виконується виклик функції:
%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop
%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop
у великих словниках швидкість майже однакова (накладні витрати на повторення через велику колекцію перетворюють малу вартість виклику функції).
Аналогічним чином ви можете створювати кортежі та набори ключів словника:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
остерігайтеся зап'ястя в коробці!