У меня есть список словарей x
и список случайных чисел x_randoms
. Я хочу обновить каждый из словарей значениями из списка случайных чисел. Я сделал следующее, и это работает, но это немного странно:
import random
x = [{'key1': '123', 'key2': {'key2.1': 500, 'key2.2': True}},
{'key1': '123', 'key2': {'key2.1': 500, 'key2.2': True}},
{'key1': '123', 'key2': {'key2.1': 500, 'key2.2': True}}]
x_randoms = [random.random() for i in range(len(x))]
print("nBefore loop...", x)
[j.update({'key3': x_randoms[i]}) for i, j in enumerate(x)]
print("nAfter loop...", x)
Список внизу — это в основном то, что меня беспокоит. Это нормально или можно улучшить?
2 ответа
Ваши подозрения верны, это вызвано использованием синтаксиса понимания для побочных эффектов и обычно является плохой практикой.
Лучше сделать это с помощью for
петля
for item in x:
# this also gets rid of your random number list
item['key3'] = random.random()
Вместо повторения range(len(x))
и игнорируя значение, вы можете просто перебрать x
и игнорируйте значение:
x_randoms = [random.random() for _ in x]
Вместо перечисления x
только для доступа x_randoms
, вы можете использовать zip
чтобы перебрать оба параллельно:
for xdic, xr in zip(x, x_randoms):
xdic['key3'] = xr