Как удалить словарь из списка словарей
Есть список словарей
a = [
{
'key': 1,
'value': 10
},
{
'key': 2,
'value': 5
},
{
'key': 3,
'value': 7
},
{
'key': 4,
'value': 27
},
{
'key': 5,
'value': 96
},
{
'key': 6,
'value': 3
}
]
Необходимо, чтобы при сравнении двух элементов на определенное условие, удалялся словарь, который не подходит. Например, при сравнении двух элементов удалять тот, где значение ключа 'value' меньше. Необходимо сравнить каждый элемент с каждым, а не просто соседние элементы. И нужно, чтоб элемент не соответствующий условию, сразу удалялся, и при этом не нарушалась итерация цикла. Тогда на выходе надо получить:
a = [
{
'key': 5,
'value': 96
},
]
Пример решения
delete_chars = []
for i in range(len(a)):
value1 = a[i].get('value')
for j in range(i+1, len(a)):
value2 = a[j].get('value')
if value1 < value2:
delete_chars.append(a[i])
else:
delete_chars.append(a[j])
a = [i for i in a if i not in delete_chars]
P.S. решение подходит, но можно ли как то обойтись без создания нового списка, а прям в цикле удалять неподходящие значения
Ответы (2 шт):
Очень сомневаюсь в эффективности и необходимости данного и нужного решений. Я бы использовал простой цикл с поиском максимального значения и запоминанием индекса словаря где оно содержится. И создавал список с этим словарём.
max_val = float('-inf') # минус бесконечность(что бы любое значение было больше)
max_index = -1
for ind in range(len(a)):
val = a[ind]['value']
if val > max_val:
max_val = val
max_index = ind
a = [a[max_index]]
На первый взгляд, задача выглядит как поиск максимума среди значений словаря. Тогда так:
a = [max(a, key=lambda x: x['value'])]