Добрый день.
Извините, если мой вопрос может показаться глупым или он уже был опубликован (я искал его, но ничего не нашел. Если я ошибаюсь, дайте мне знать, пожалуйста: я здесь новичок и, возможно, я не лучший в поиске правильных вопросов).
Мне было интересно, можно ли удалить ( pop) общий элемент из словаря в Python.
Идея возникла из следующего упражнения:
Напишите функцию для нахождения суммы VALUES в заданном словаре.
Очевидно, есть много способов сделать это: суммирование словаря.values(), создание переменной для суммировать и перебирать словарь, обновлять его и т. д. Но я пытался решить эту проблему с помощью рекурсии, что-то вроде:
def total_sum(dictionary):
if dictionary == {}:
return 0
return dictionary.pop() + total_sum(dictionary)
Проблема этой идеи в том, что мы не знаем, априори, который может быть «первым» ключом словаря, поскольку он неупорядочен: если бы это было список, то использовался бы индекс 0, и все бы работало.
Поскольку меня не волнует порядок извлечения элементов, было бы достаточно иметь способ удалить любой из предметы («общий» предмет). Как вы думаете, возможно ли что-то подобное или мне обязательно нужно использовать какую-то вспомогательную переменную, теряя весь смысл использования рекурсии, преимуществом которой был бы очень лаконичный и простой код?
На самом деле я нашел следующее решение, которое, как вы можете видеть, делает код более сложным и трудным для чтения: Я считаю, что оно все равно могло бы быть интересным и полезным, если бы существовало какое-то встроенное, простое и прямое решение для этого конкретного случая. проблема удаления «первого» элемента словаря, хотя можно было найти множество «искусственных» альтернативных решений.
def total_sum(dictionary):
if dictionary == {}:
return 0
return dictionary.pop(list(dictionary.keys())[0]) + total_sum(dictionary)
Я приведу вам простой пример словаря, к которому можно применить эту функцию, если вы хотите провести несколько простых тестов.
ex_dict = {"milk":5, "eggs":2, "flour": 3}
Подробнее здесь: https://stackoverflow.com/questions/629 ... ython-dict