Как я могу использовать оператор сравнения для фильтрации целых чисел в словаре, который также содержит строки в качестве значений? - PullRequest
1 голос
/ 30 января 2020

Я хочу написать код, который исключает значения int выше определенного порога, игнорируя строки. В настоящее время код, который я имею, выдает ошибку '>' not supported between instances of 'str' and 'int'. Вот код:

dictionary = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 'montana' }
number = 2

def remove_numbers_larger_than(number, dictionary):
    for k, v in list(dictionary.items()):
        if v > number: 
            del dictionary[k]
return dictionary 



print(remove_numbers_larger_than(number, dictionary))

Вывод должен быть: {'a': 1, 'b': 2, 'e': 'montana'}

Ответы [ 3 ]

0 голосов
/ 30 января 2020

Вы можете использовать try - except или проверить тип int:

# try-except
def remove_numbers_larger_than(number, dictionary):
    for k, v in list(dictionary.items()):
        try:
            if v > number: 
                del dictionary[k]
        except TypeError:
            pass
    return dictionary 

# Check type
def remove_numbers_larger_than(number, dictionary):
    for k, v in list(dictionary.items()):
        if isinstance(v, int) and v > number: 
            del dictionary[k]
    return dictionary 

Функция может быть дополнительно упрощена до словарного понимания:

def remove_numbers_larger_than(number, dictionary):
    return {k: v for k,v in dictionary.items() if not(isinstance(v, int) and v > number)}
0 голосов
/ 30 января 2020

Использовать словарь:

dictionary = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 'montana' }
number = 2
print({k: v for k, v in dictionary.items() if not isinstance(v, int) or v <= number})

Вывод:

{'a': 1, 'b': 2, 'e': 'montana'}
0 голосов
/ 30 января 2020

Это может помочь вам:

dictionary = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 'montana' }
number = 2

newd = {k:v for k,v in dictionary.items() if type(v) != int or v <= number}
print(newd)
# {'a': 1, 'b': 2, 'e': 'montana'}
...