从嵌套词典中删除键和值?



我有一个这样的嵌套字典:

book={20:{'start':'2008','reason':'sold'},
21:{'start':'2009','reason':'returned'},
22:{'start':'2010','reason':'returned'}}

我想删除"原因"=="已售出"的项目。

输出应如下所示:

book={21:{'start':'2009','reason':'returned'},
22:{'start':'2010','reason':'returned'}}

这是我的代码,它不起作用:

for k, v in book:
if v == 'sold':
del book[k] 

您可以使用字典理解:

book={20:{'start':'2008','reason':'sold'},
21:{'start':'2009','reason':'returned'},
22:{'start':'2010','reason':'returned'}}
new_book = {a:b for a, b in book.items() if b['reason'] != 'sold'}

输出:

{21: {'start': '2009', 'reason': 'returned'}, 22: {'start': '2010', 'reason': 'returned'}}

这可以通过一些调试内容完成工作。

booko = book.copy()
for k in book:
print('k', k)
if 'reason' in book[k] and book[k]['reason'] == 'sold':
print(book[k]['reason'])
del booko[k]
print booko
book=booko

复制了原件,因为否则迭代器不知道下一步是什么......

dictionary comprehension很酷,但摸索起来超级奇怪。我喜欢可维护性的循环。此外,在学习过程中,您可以执行 print 语句以查看实际发生的情况。

试试这个:

dictionary = {}
book={20:{'start':'2008','reason':'sold'},
21:{'start':'2009','reason':'returned'},
22:{'start':'2010','reason':'returned'}}
for d in book:
if book[d]['reason'] != 'sold':
dictionary[d] = book[d]
else:
pass
print(dictionary)

输出:

{21: {'start': '2009', 'reason': 'returned'}, 22: {'start': '2010', 'reason': 'returned'}}

我遍历书籍词典,然后检查词典的'reason'列是否'sold',如果是,则通过,如果没有将其添加到新词典中

最新更新