Почему мое условие исключает только первую пару ключ / значение в моем словаре? - PullRequest
0 голосов
/ 23 января 2020

В настоящее время я работаю над проблемой, касающейся словарей, где вы пишете функцию, которая удаляет все пары ключ / значение, в которых значение больше заданного числа. Вот код:

def remove_numbers_larger_than(number, dict1):
    for i, value in dict1.items():
        if value > number :
            del dict1[i]
            return dict1
        else:
            return dict1


dict1 = {'animals': 6 , 'truck': 3, 'country': 2}
number = 2

print(remove_numbers_larger_than(number, dict1))

Обычно я ожидаю увидеть вывод: {'country': 2} , учитывая, что это единственное значение, меньшее указанного числа, но вместо этого я получить вывод: {'truck': 3, 'country': 2} . Кажется, что он принимает начальное условие и удаляет первое значение, но затем l oop останавливается.

1 Ответ

1 голос
/ 23 января 2020

Только первый элемент удаляется, потому что вы сразу же возвращаетесь из функции в первой итерации для l oop. Для l oop через каждое значение вы не должны возвращаться до тех пор, пока не закончится for l oop.

Однако есть еще одна проблема с кодом. Вы просматриваете список (dict1.items()), который изменится при удалении элементов из словаря. Простое решение - создать копию списка элементов, который вы перебираете, что позволяет без проблем изменить исходный список:

for i, value in list(dict1.items()):
...