Какой способ добавления dict в список более эффективен

#python

#python

Вопрос:

 # Method one
array_a = []
a = {}
for i in range(5):
    a = {}
    a[str(i)] = i
    array_a.append(a)
print(array_a)
# [{'0': 0}, {'1': 1}, {'2': 2}, {'3': 3}, {'4': 4}]

# Method two    
from copy import deepcopy
array_b = []
b = {}
for i in range(5):
    b.clear()
    b[str(i)] = i
    array_b.append(deepcopy(b))
print(array_b)
# [{'0': 0}, {'1': 1}, {'2': 2}, {'3': 3}, {'4': 4}]
  

Я хотел бы знать, какой из вышеперечисленных является более эффективным.
И, если у вас есть лучший вариант, пожалуйста, дайте мне знать.

Комментарии:

1. Вы проверяли это? у ipython есть действительно отличная timeit команда, которая делает это довольно простым.

Ответ №1:

Разница не имеет значения. Оба должны каждый раз создавать новый dict. Поскольку первый понятнее, он предпочтительнее второго метода.

Моим предложением было бы понимание списка:

 array_c = [{str(i): i} for i in range(5)]
  

Комментарии:

1. Согласен. Состав списка эквивалентен и намного более лаконичен. Также это выглядит круто 🙂

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

Ответ №2:

Вот однострочный вариант, который также должен быть более эффективным:

 array_a.extend([{str(i): i} for i in xrange(5)])
  

Или через map():

 array_a.extend(map(lambda i: {str(i): i}, xrange(5)))