Как я могу перебрать словарь, чтобы обновить и вернуть его? - PullRequest
0 голосов
/ 25 мая 2019

В этом коде любые значения (синонимы) в словаре word_dict, содержащие не более 7 символов, должны быть удалены из словаря.

Мне удалось удалить значения, содержащие не более 7 символов, и первоначально я попытался создать новый словарь для хранения обновленных значений, но это не сработало, и я испортил свой код.

Любые идеи о том, как я могу редактировать существующие значения словаря без необходимости создания нового словаря? Я предпочитаю не использовать наборы, понимания или однострочники для достижения этой цели. Ожидаемый результат должен быть таким: (может быть в любом порядке)

{
    'show' : ['communicate', 'manifest', 'disclose'],
    'dangerous' : ['hazardous', 'perilous', 'uncertain'],
    'slow' : ['leisurely', 'unhurried'],
}

Код, который я пытался использовать для решения проблемы, который в основном лежит в функции remove_word (word_dict).

word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],
             'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack'],
             'dangerous': ['perilous', 'hazardous', 'uncertain']}

def main():
    edited_synonyms = remove_word(word_dict)
    print(edited_synonyms) #should print out an edited dictionary

def remove_word(word_dict):
    dictionary = {}

    synonyms_list = word_dict.values()
    new_list = []
    for i in synonyms_list:
        new_list.append(i)

    for word in new_list:
        letter_length = len(word)
        if letter_length <= 7:
            new_list.pop(new_list.index(word))

    return dictionary

Ответы [ 3 ]

3 голосов
/ 25 мая 2019

Вы можете просто обновить каждый список для каждого ключа в вашем словаре:

for key, value in word_dict.items():
    temp = []
    for item in value:
        if len(item) > 7:
            temp.append(item)
    word_dict[key] = temp

Редактировать: на самом деле вам не нужно создавать новый список temp, вы можете использовать команду remove:

for key, value in word_dict.items():
    for item in value:
        if len(item) > 7:
            value.remove(item)
1 голос
/ 25 мая 2019

Вы можете просто отфильтровать значения из существующего списка, как показано ниже.


from pprint import pprint

word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],
             'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack'],
             'dangerous': ['perilous', 'hazardous', 'uncertain']}

for k, v in word_dict.items():
    word_dict[k] = list(filter(lambda x: len(x) > 7, v))

pprint(word_dict)


Выход:

{'dangerous': ['perilous', 'hazardous', 'uncertain'],
 'show': ['communicate', 'manifest', 'disclose'],
 'slow': ['unhurried', 'leisurely']}
0 голосов
/ 25 мая 2019

Есть два способа сделать это:

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

    from pprint import pprint
    
    word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],
                 'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack'],
                 'dangerous': ['perilous', 'hazardous', 'uncertain']}
    
    for key_word in word_dict:    # loops through each identifier word
        word_dict[key_word] = [   # list comprehensioin
                word
                for word in word_dict[key_word] # fetch the original words list 
                if len(word) > 7  # fetches the list of words of size gt 7
        ]
    
    pprint(word_dict)
    
  2. Использование чистого словарного понимания

    word_dict = {key_word: [word for word in word_dict[key_word] if len(word) > 7] for key_word in word_dict}
    

И то и другое

{'dangerous': ['perilous', 'hazardous', 'uncertain'],
 'show': ['communicate', 'manifest', 'disclose'],
 'slow': ['unhurried', 'leisurely']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...