如何从包含6个或更多字母的字典键列表中删除单词?

时间:2019-05-28 03:04:30

标签: python

我不知道如何创建一个函数,该函数能够从每个列表中删除少于6个字符的单词,这些单词是字典的键的值。

我试图弹出少于6个单词,但出现“ TypeError:无法解压缩不可迭代的int对象”。我不知道我使用的方法是否正确。

def remove_word(words_dict):
    items_list = list(words_dict.items())

    for key, value in range(len(items_list) -1, -1, -1):
        if len(value) < 6:
            items_list.pop()
    words_dict = items_list.sort()
    return words_dict
words_dict = {'colours' : ['red', 'blue', 'green'],
    'places' : ['america', 'china', 'malaysia', 'argentina', 'india'],
    'animals' : ['lion', 'cat', 'dog', 'wolf', 'monkey',
                'zebra'],
    }

应打印:

1.
colours : []
places : ['america', 'malaysia', 'argentina']
animals : ['monkey']

5 个答案:

答案 0 :(得分:1)

# input data
words_dict = {'colours' : ['red', 'blue', 'green'],
    'places' : ['america', 'china', 'malaysia', 'argentina', 'india'],
    'animals' : ['lion', 'cat', 'dog', 'wolf', 'monkey',
                'zebra'],
    }
# creating a final output dictionary 

#looping through each key value pair present in dictionary and adding the key 
# the final dictionary and processed valeus to the corresponding key
# using lambda function, fast readable and easy to understand 
result = {k:list(filter(lambda x:len(x)>=6, v)) for k,v in words_dict.items()}
print(result)

输出

    {'colours': [], 'places': ['america', 'malaysia', 'argentina'], 'animals': []}

答案 1 :(得分:0)

您可以使用嵌套循环来做到这一点:

for key in words_dict:
    words_dict[key] = [i for i in dict[key] if len(i) >= 6]

由于python处理列表迭代器的方式,循环理解(根据先前列表的条件构建新列表)实际上是完成此任务的最简单方法。实际上,您也可以将其放入dict理解中:

new_words_dict = {key: [i for i in value if len(i) >= 6] for key, value in words_dict.items()}

答案 2 :(得分:0)

您可以使用dict上的循环和嵌套的理解来实现。

words_dict = {
    'colours' : ['red', 'blue', 'green'],
    'places' : ['america', 'china', 'malaysia', 'argentina', 'india'],
    'animals' : ['lion', 'cat', 'dog', 'wolf', 'monkey','zebra'],
}

for key, lst in words_dict.items():
    filtered_lst = [word for word in lst if len(word) >= 6]
    print(f"{key} : {filtered_lst}")

输出为:

colours : []
places : ['america', 'malaysia', 'argentina']
animals : ['monkey']

或者实际上要创建一个函数,该函数从本质上删除元素并返回校正的字典,就像您的代码最初所做的那样,然后使用以下内容:

def remove_words(words_dict):
    return {key: [word for word in lst if len(word) >= 6] 
            for key, lst in words_dict.items()}

但是您仍然需要遍历它们以正确打印它。

words_dict = remove_words(words_dict)
for key, lst in words_dict.items():
    print(f"{key} : {lst}")

答案 3 :(得分:0)

{k: [i for i in v if len(i) > 5] for k, v in words_dict.items()}

答案 4 :(得分:0)

也许不是最干净的方法,但这不是一种有效的方法,但是它是可读的,我以这种方式编写了它,以便您可以看到其工作的逻辑

 In [23]: def remove_word(my_dict):
    ...:     for key in my_dict:
    ...:         to_delete = []
    ...:         for values in my_dict[key]:
    ...:             if len(values) < 6:
    ...:                 to_delete.append(values)
    ...:         for word in to_delete:
    ...:             my_dict[key].remove(word)
    ...:     return my_dict
    ...:
    ...:

它将为您提供所需的输出

In [26]: remove_word(words_dict)
Out[26]:
{'colours': [],
 'places': ['america', 'malaysia', 'argentina'],
 'animals': ['monkey']}