Задать вопрос
@bituke

Как удалить нужный мне элемент из списка?

В общем, вот вырезка из кода:
required_material = [{12: 1}, {2: 1.8}, {3: 2}, {2: 1}, {2: 0.6}] # список требуемых материалов (кол-в: длина)
materials_in_stock = [{6: 2.3}, {3: 2.5}, {6: 0.4}] # список имеющихся материалов (кол-в: длина)

def min_sort(dict1):
	'''Функция, которая определяет минимальное 
	значение из всех словарей списка.
	
	Принимает список с элементами в виде словарей
	проходит по каждому значению словаря, выявляет из них наименьшее и возвращает его.'''

	list_index = []
	for i in range(0, len(dict1)):
		a = dict1[i]
		for m in a:
			min_index = dict1[i][m]
			list_index.append(min_index)
	minimum_value = min(list_index)
	return minimum_value

def compare_values(min_value_required_materials, min_value_available_materials):
	'''Функция, которая удаляет из списка имеющихся материалов словарь,
	в котором длина материала не соответсвует минимально длине требуемого материала.

	Принимает две функции list_index с списками требуемого материала, и материала в наличии,
	после чего выполняет проверку и удаляет словарь.'''

	if min_value_available_materials < min_value_required_materials:
		print('Имеется лишний материал, удаляю.')
		for i in materials_in_stock:
			if min_value_available_materials in i.values():
				pass # В этом блоке нужно удалить словарь в котором имеется наше минимальное значение!!!

	else:
		print('Весь материал соответствует требуемой длине.')

compare_values(min_sort(required_material), min_sort(materials_in_stock))

Всю логику и задачи кода, я описал в комментариях.
Требуется удалить словарь из списка, в котором имеется минимальное значение.

пол часа думаю какое решение здесь может быть, буду ооочень благодарен за помощь.
Если не сложно, опытные питонисты, пожалуйста, сделайте ревью кода.
  • Вопрос задан
  • 139 просмотров
Подписаться 1 Простой 7 комментариев
Решения вопроса 2
0xD34F
@0xD34F
def get_min_value(materials):
  return min(m for n in materials for m in n.values())

def filter_materials(materials, min_value):
  return [ n for n in materials if all(m >= min_value for m in n.values()) ]


materials_in_stock = filter_materials(materials_in_stock, get_min_value(required_material))
Ответ написан
Комментировать
@dmtrrr
Backend developer
Если в словаре всегда одна пара ключ значение, то можно так
In [43]: l = [{12: 1}, {2: 1.8}, {3: 2}, {2: 1}, {2: 0.6}]

In [44]: sorted(l, key=lambda x: list(x.values())[0])[1:]
Out[44]: [{12: 1}, {2: 1}, {2: 1.8}, {3: 2}]
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы