Обновление значений в странном списке диктов - PullRequest
1 голос
/ 31 октября 2019

У меня следующая структура данных:

fields = [{'key': 'ADDRESS1', 'value': None}, {'key': 'ADDRESS2', 'value': None}]

Обратите внимание, что структура этих данных находится вне моего контроля. Но мне нужно с этим поработать.

Как бы я мог обновить value "ключ" Object, где key "ключ" равен, скажем 'ADDRESS1', так, чтобыПосле манипуляции у меня будет следующее:

NB Обновление должно обновлять значение, основанное на key, а не на индексе объекта - так как это определено свободно.

fields = [{'key': 'ADDRESS1', 'value': 'Some Address Value'}, {'key': 'ADDRESS2', 'value': None}]

Ответы [ 2 ]

3 голосов
/ 31 октября 2019
d_list = [{'key': 'ADDRESS1', 'value': None}, {'key': 'ADDRESS2', 'value': None}] 

for d in d_list:
    if d['key'] == 'ADDRESS1':
        d['value'] = 'Some Address Value'

>>> d_list

[{'key': 'ADDRESS1', 'value': 'Some Address Value'}, {'key': 'ADDRESS2', 'value': None}]

РЕДАКТИРОВАТЬ : удален список комп в соответствии с предложением в комментариях

2 голосов
/ 31 октября 2019

Подход Брайана Джозефа работает хорошо, если вы планируете изменить только одно значение. Но если вы хотите внести много изменений, вы можете устать писать циклические и условные для каждого изменения. В этом случае вам может быть лучше преобразовать свою структуру данных в обычный dict, внести в нее изменения и в конце преобразовать обратно в странный список слов.

d_list = [{'key': 'ADDRESS1', 'value': None}, {'key': 'ADDRESS2', 'value': None}]
d = {x["key"]: x["value"] for x in d_list}

d["ADDRESS1"] = 'Some Address Value'
d["new_key"] = "foo"

new_d_list = [{"key": k, "value": v} for k,v in d.items()]
print(new_d_list)

Результат:

[{'key': 'ADDRESS1', 'value': 'Some Address Value'}, {'key': 'ADDRESS2', 'value': None}, {'key': 'new_key', 'value': 'foo'}]

(Окончательный порядок диктов может отличаться при использовании версии Python ниже 3.6)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...