Обновление словаря Python в цикле

У меня есть список словарей 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 ответа
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
    

      Добавить комментарий

      Ваш адрес email не будет опубликован. Обязательные поля помечены *