Python 是否从嵌套字典中删除键和值?
我有这样一个嵌套字典:Python 是否从嵌套字典中删除键和值?,python,dictionary,nested,Python,Dictionary,Nested,我有这样一个嵌套字典: 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'}} 我想删除“
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'}}
我想删除“原因”==“售出”的项目
输出应如下所示:
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'}}
{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
复制了原始内容,因为否则迭代器不知道下一步是什么
字典理解很酷,但对格罗克来说却非常怪异。我喜欢循环的可维护性。在学习过程中,您还可以执行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'}}
{21: {'start': '2009', 'reason': 'returned'}, 22: {'start': '2010', 'reason': 'returned'}}
我通过图书词典进行迭代,然后检查词典的
'reason'
列是否为'sell'
,如果是,则通过,如果不是,则将其添加到新词典中1。发生了什么事?2.尝试打印“book[k]”,而不是尝试删除它。打印什么?谢谢你的回答。我收到以下错误:“KeyError:”原因“”@乔纳森:现在就开始。似乎你没有在所有的字典里都有“原因”键。太好了!是的,我在所有的口述中都没有“理由”。我没注意到。非常感谢你。