Я пытаюсь обновить определенный элемент в списке словарей на основе другого значения
У меня есть список словарей
Product_id= [{ "id": 342, "count": 10 },
{"id": 345, "count": 20 },
{"id": 546, "count": 30 },
{"id": 324, "count": 40 },
{"id": 789, "count": 50 },
{"id": 675, "count": 60 }]
Я хотел бы увеличить «количество» x «id», где «id» == x
Например, если «id» == 342, я хочу увеличить количество на 1, чтобы вывод был
print(Product_id)
[{ "id": 342, "count": 11 },
{ "id": 345, "count": 20 },
{ "id": 546, "count": 30 },
{"id": 324, "count": 40 },
{"id": 789, "count": 50 },
{"id": 675, "count": 60 }]
Я могу подсчитать количество, но могу обновить () количество...
Я уже пробовал много вещей, искал стеки и т. д. (И я знаю, что моя последняя попытка была далекой, ниже), поэтому любые идеи будут приветствоваться.
for d in Product_id:
d.update((k + 1, "count") for k, v in d.items() if v\["id"\] == 342)






Мое предложение:
for dic in Product_id:
if dic["id"] == id:
dic["count"] += 1
Большое спасибо за вашу помощь! Это именно то, что я искал :) Я знал, что это цикл for, но не знал, как его правильно выполнить!
Поскольку у вас есть list из dictionaries, вы можете просмотреть каждый dictionary в list. После этого найдите интересующий id(вот он 342). Затем увеличьте count этого словаря на 1.
Вот как вы можете это сделать:
Product_id= [{ "id": 342, "count": 10 },
{"id": 345, "count": 20 },
{"id": 546, "count": 30 },
{"id": 324, "count": 40 },
{"id": 789, "count": 50 },
{"id": 675, "count": 60 }]
x = 342
for item in Product_id:
if item["id"] == x:
item["count"] += 1
# You can add a break here if there's only one item to update.
Выход:
[{'id': 342, 'count': 11}, {'id': 345, 'count': 20}, {'id': 546, 'count': 30}, {'id': 324, 'count': 40}, {'id': 789, 'count': 50}, {'id': 675, 'count': 60}]
Это будет работать, хотя я бы добавил перемена после приращения значения пока не, есть возможность большего количества словарей с одним и тем же «идентификатором».
Вам нужно перебрать весь список словарей и проверить элемент, удовлетворяющий вашему условию.
for p in Product_id:
if p['id'] == 342:
p['count']+=1
print(Product_id)
Большое спасибо за вашу помощь! Это именно то, что я искал :) Я знал, что это цикл for, но не знал, как его правильно выполнить!
Здесь есть действительно хороший ответ на ваш вопрос, связанный с pythonic --> Добавить элемент в каждый словарь списка (понимание списка)
Я бы подошел к этому, используя список списков в python как для удобочитаемости, так и для написания успешного/питоновского кода:
В 1 строке:
p_id = [{**dct,**{'count':dct[k]+1}} if dct['id']==342 else dct for dct in Product_id]
Если вам нужна немного более адаптируемая версия для использования в функции и т. д.:
# let x be the value that you want to upate
x = 342
# and k be the key of that value
k = 'count'
p_id = [{**dct,**{k:dct[k]+1}} if dct['id']==x else dct for dct in Product_id]
- Using
ifelsestatemets in list comprehension to return modified{'key' : 'value'}pair value if condition is true and simply return the dictionary if it flase.- You can't assing variables from within list comp as in
value+=1, howevever flattend form (using both if and else) is still less verbose than non list comprehesion form.**{}merges to dictionaris with right most replacing the key vluee pari of 'count' this is equivalent:
p_id = [dict(dct,**{k:dct[k]+1}) if dct['id']==x else dct for dct in Product_id]
Which will produce the same result and you may prefer. With the left most items where condition is true, if this evaluetes to false then dict if simplyt returned. 4. Star star ** unpacks the dictionary, see --> What does ** (double star/asterisk) and * (star/asterisk) do for parameters? 5. This this in longer form is eqivalent to:
p_id = [{'id':dct['id'],'count':dct['count']+1} if dct['id']==x else dct for dct in Product_id]
6 Rightmost item is the for loop itself and replaces:
for item in itterable:
if some_condition:
#do some stuff
Другие указали, как сделать обновление, я просто замечу, что список диктов здесь может быть не оптимальным. Например, могут быть словари с повторяющимися идентификаторами. Почему бы вам не создать единый словарь с ключом
id?