>我有一个列表保存为类属性,我正在尝试删除该列表中的特定字典。
该项目很简单,用户应该能够将项目添加到集合(保存在列表中(、编辑它们、按类型过滤搜索结果(以前添加到列表中(以及从列表中删除字典条目。
下面是构造函数:
class Item:
py_collection_list = []
def __init__(self, item_name: str, item_type: str, date_add, dom, item_info: str):
self.__id = Item.get_next_id()
self.item_name: str = item_name
self.item_type: str = item_type
self.date_add = date_add
self.dom = dom
self.item_info: str = item_info
Item.py_collection_list.append(self)
(Item
是超级类,py_collection_list
是列表(
我能够使用以下代码创建一个过滤器:
def show_items():
print('View items by type nComputer | Camera | Phone | Video Player ')
type_selection = input('Type> ')
print("{0:3}t{1:20}t{2:10}t{3:10}".format("ID", "Item", "Date added", "Date manufactured"))
for i in Item.py_collection_list:
if type_selection == i.item_type:
print("{0:03d}t{1:20}t{2:10}t{3:10}".format(i.get_id(), i.item_name, i.date_add, i.dom))
我使用了几个删除选项,这是最新的不起作用的选项:
def delete_item():
print("{0:3}t{1:20}t{2:10}t{3:10}".format("ID", "Item", "Date added", "Date manufactured"))
for i in Item.py_collection_list:
print("{0:03d}t{1:20}t{2:10}t{3:10}".format(i.get_id(), i.item_name, i.date_add, i.dom))
remove_item = input("Type name of the item you would like to delete from collection> ")
if remove_item == i.item_name:
del [remove_item]
在delete_item
方法中,只检查列表中最后一个元素的相等性。
您的for
循环的工作原理是遍历您的list
并将每个值分配给i
。在list
用尽并退出后,i
仍包含为其分配的最后一个值。这是您检查与remove_item
相等的唯一元素。
检查所有项目是否相等并筛选不匹配的项目的最简单方法是列表理解。
def delete_item():
print("{0:3}t{1:20}t{2:10}t{3:10}".format("ID",
"Item",
"Date added",
"Date manufactured"))
for i in Item.py_collection_list:
print("{0:03d}t{1:20}t{2:10}t{3:10}".format(i.get_id(),
i.item_name,
i.date_add,
i.dom))
remove_item = input("Type name of the item you would like to delete from collection>")
Item.py_collection_list = [i for i in Item.py_collection_list if i.item_name != remove_item]
这允许您一次过滤多个条目,并且不会在迭代时发生诸如更改列表之类的暴行。