list - python :如何从字典中删除元素并将它作为列表返回?

迄今为止,我尝试使用.values()方法去获取方括号中的单词,然后创建一个列表来存储这些单词。 但是,我在使用pop方法时遇到了一个问题,

" TypeError :'str'object cannot be interpreted as an integer".

这是我的代码:


word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],


 'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack']}



def main():


 edited_synonyms = remove_word(word_dict)


 print(edited_synonyms)



def remove_word(word_dict):


 synonyms_list = word_dict.values()


 new_list = []


 for i in synonyms_list:


 new_list.extend(i)



 for word in new_list:


 letter_length = len(word)


 if letter_length <= 7:


 new_list.pop(word)



 return new_list



main()



时间:

你的节目是对的,你需要在pop中添加索引值。

修改代码:


>>> def remove_word(word_dict):


 synonyms_list = word_dict.values()


 new_list = []


 for i in synonyms_list:


 new_list.extend(i)



 for word in new_list:


 letter_length = len(word)


 if letter_length <= 7:


 new_list.pop(new_list.index(word)) # Modified line



 return new_list



输出:


>>> main()


['exhibit', 'communicate', 'manifest', 'disclose', 'unhurried', 'leisurely', 'behind', 'slack']



尝试这个:


outp = {k: [v for v in word_dict[k] if len(v)<=7 ]for k in word_dict}



输出:


{'show': ['communicate', 'manifest', 'disclose'], 'slow': ['unhurried', 'leisurely']}



list上,可以基于索引来pop元素。


word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],


 'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack']}



def main():


 edited_synonyms = remove_word(word_dict)


 print(edited_synonyms)



def remove_word(word_dict):


 synonyms_list = word_dict.values()


 new_list = list()


 for i in synonyms_list:


 new_list.extend([word for word in i if len(word) > 7])


 return new_list



main()



我会这样做:


for key in word_dict.keys():


 word_dict[key] = [x for x in word_dict[key] if len(x)>7]



或者你可以使用下面的列表中的remove属性:-


for word in new_list:


 print(word)


 letter_length = len(word)


 if letter_length <= 7:


 new_list.remove(word)



替代方法:-


print(new_list)


for word in new_list:


 print(word)


 letter_length = len(word)


 if letter_length <= 7:


 new_list.pop(new_list.index(word))



你应该使用remove函数而不是pop

remove()函数将单个元素作为参数。

pop()函数接受一个参数(索引),并移除该索引处的项。

更多信息:

https://docs.python.org/3/tutorial/datastructures.html

list.pop作为参数从列表中弹出,但是,当你执行new_list.pop(word)时,实际上提供了 item本身,因此错误。

从文档:

list.pop([i] )
移除列表中给定位置处的 item,并返回它。 你可以使用字典推导轻松解决此问题,其中只包含列表中的值长度为7,

要修正这个问题只要找到你想通过list.remove()弹出的单词的索引即可

所以这行


 new_list.pop(word)



更改为


 new_list.remove(word)



但是更好的方法可能是使用这样的列表推导


word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],


 'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack']}



#Iterate through the values of the list and pick one with length > 7


res = [v for value in word_dict.values() for v in value if len(v) > 7 ]


print(res)



输出将为


['communicate', 'manifest', 'disclose', 'unhurried', 'leisurely']




word_dict = {'show': ['display', 'exhibit', 'convey', 'communicate', 'manifest', 'disclose'],


 'slow': ['unhurried', 'gradual', 'leisurely', 'late', 'behind', 'tedious', 'slack']}



res =[]



for i in word_dict:


 tmp =[j for j in word_dict[i] if len(j)<=7]


 res.extend(tmp)



print(res)



# output ['display', 'exhibit', 'convey', 'gradual', 'late', 'behind', 'tedious', 'slack']



...