Прямой способ:
for obj in json:
if obj['id'] == 2:
obj['name'] = 'something'
Объекты изменяемы, поэтому вы здесь напрямую мутируете объект. Это самый простой способ. Типичный эквивалент Javascript будет выглядеть следующим образом:
json.forEach(obj => {
if (obj.id == 2) {
obj.name = 'something';
}
});
Немного более сжатая версия:
for obj in (o for o in json if o['id'] == 2):
obj['name'] = 'something'
Это встраивает выражение генератора, которое предварительно фильтрует объекты до l oop более. В качестве альтернативы:
for obj in filter(lambda o: o['id'] == 2, json):
obj['name'] = 'something'
В некоторой степени эквивалентно:
json.filter(o => o.id == 2).forEach(obj => obj.name = 'something')
Еще более сжатая версия:
json = [{**obj, 'name': 'something' if obj['id'] == 2 else obj['name']} for obj in json]
Это понимание списка, которое создает новый объект и новый список, что-то вроде:
json = json.map(o => ({...obj, name: obj.id == 2 ? 'something' : obj.name}))
Вы сами решаете, что вы считаете наиболее читаемым…