我有一本字典。。在
self.books = {}
newbook = {'Quantity': '1', 'Price': '1.58', 'Id': '1006', 'Title': 'Book1', 'Status': 'Out'}
我添加的命令如下:
^{pr2}$要显示所有帐簿条目:
for books in self.books.values():
print("{0}".format(order))
{'Quantity': '3', 'Price': '7.56', 'Id': '1003', 'Title': 'To kill a mock', 'Status':'In'}
{'Quantity': '7', 'Price': '2.9', 'Id': '1002', 'Title': 'LOTR', 'Status':'In'}
{'Quantity': '2', 'Price': '5.45', 'Id': '1001', 'Title': 'HPATFS', 'Status':'Out'}
{'Quantity': '12', 'Price': '11.57', 'Id': '1004', 'Title': 'Best book ever', 'Status':'Out'}
不幸的是,我不能根据Id、价格或状态删除图书条目?我试过del或pop,但条目仍然存在。在
for k, v in self.books.items():
if k == books['Id']:
# del self.books[k]
self.books.pop(books['Id'], None)
首先也是最重要的一点是,不能使用不确定是否唯一的值作为字典的键。字典是按关键字索引的,索引必须是唯一的。实际上,语言甚至不允许您尝试添加两个具有相同值的条目。添加第二项会覆盖第一项:
因此,您肯定应该使用
'Id'
值作为字典的键,假设您的id实际上是唯一的。在正因为如此,剩下的问题就归结为根据字典条目的值而不是键来查找字典条目。为此,您必须定义dict包含多个具有该值的条目时的行为。我假设你想要一个带有指定价格标签的所有ID的列表。在
对于这个问题,我唯一能想到的方法就是迭代dict:
^{pr2}$(使用
dic.iteritems()
代替python2.X)例如:
一旦知道感兴趣的书的键,就可以对该键应用所有字典操作。在
代码的最后一部分有两个不同的问题。首先,
pop
从字典中获取一个键作为参数,而不是值。另外,这段代码生成一个RuntimeError: dictionary changed size during iteration
,因为您在字典本身上进行迭代,并在每个循环中删除一个项。您可以通过迭代您的dict副本来绕过这个问题,即:根据
self.books
的大小,这可能不合适,因为您的空间需求是原来的两倍。在相关问题 更多 >
编程相关推荐