Как перебрать все ключи словаря? - PullRequest
0 голосов
/ 06 ноября 2018

Diction - это словарь, содержащий ключи и значения. Я хочу перебрать ключи словаря, в которых я верну массив ключей со значениями, меньшими или равными 20. Но я перебираю только один ключ. Как перебрать все ключи словаря?

def total(diction):
    for key in diction:
        if diction[key] <= 20:
            return [key]

Ответы [ 6 ]

0 голосов
/ 06 ноября 2018

Что вы подразумеваете под «итерацией по одному ключу»? Вы действительно перебираете все ключи, когда пишете это, по одному -

for key in diction:

Если вы хотите сделать это в одной строке, вы можете использовать лямбда-функцию для сокращения кода -

list(filter(lambda x: dic[x]<=20, dic.keys()))

Хотя и здесь вы проверяете ключи по одному. Это итерация !!

0 голосов
/ 06 ноября 2018

Я не совсем уверен, правильно ли я понял ваш вопрос. Но вы можете получить список ключей объекта словаря с атрибутом словаря ".keys ()". Например. если у вас есть объект словаря с именем «diction», то с помощью diction.keys () вы получите объект списка с ключами в качестве элемента списка. Затем вы можете перебирать все ключи следующим образом:

Для dict_key в diction.keys (): дикция [dict_key] = ......

Надеюсь, это поможет

0 голосов
/ 06 ноября 2018

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

def total(diction):
    key_list = []
    for key in diction:
        if diction[key] <= 20:
            key_list.append(key)
    return key_list

Это также может быть сделано с пониманием списка:

def total(diction):
    return [k for k in diction if diction[k]<=20]
0 голосов
/ 06 ноября 2018

Ваша функция завершает выполнение, когда достигает первого оператора return.

Вы можете настроить свою функцию следующим образом.

def total(diction):
    result = []
    for key, value in diction.items():
        if value <= 20:
            result.append(key)
    return result

Эта функция добавляет ключи, удовлетворяющие вашему критерию, в список и возвращает этот список только после просмотра всех пар (ключ, значение) в dict.

Также вы можете написать функцию генератора:

def total_gen(diction):        
    for key, value in diction.items():
        if value <= 20:
            yield key

Вы могли бы рассмотреть возможность присвоения функциям лучшего имени, чем total, и попросить их принять дополнительный параметр (например, с именем limit), чтобы избежать жесткого кодирования значения 20.

Демо-версия:

>>> d = {'a': 5, 'b': 100, 'c': 23, 'd': -2}
>>> total(d)
>>> ['d', 'a']
>>> list(total_gen(d))
>>> ['d', 'a']

Конечно, вы также можете использовать сжатый список или выражения генератора:

>>> [key for key, value in d.items() if value <= 20]
>>> ['d', 'a']
>>> 
>>> for k in (key for key, value in d.items() if value <= 20):
...:    print(k)
...:    
d
a

Функция генератора и выражение генератора особенно полезны в случаях, когда вам не нужны все ключи в памяти одновременно - например, если вы просто хотите перебрать их.

0 голосов
/ 06 ноября 2018
def total(diction):
    result = []
    for key in diction:
        if diction[key] <= 20:
            result.append(key)
    return result

Или с использованием понимания списка

def total(diction):
    return [key for key in diction if diction[key] <= 20]
0 голосов
/ 06 ноября 2018

Вы можете перебирать элементы dict с помощью понимания списка следующим образом:

def total(diction):
    return [key for key, value in diction.items() if value <= 20]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...