我不知道如何创建一个函数,该函数能够从每个列表中删除少于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']
答案 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']}