我有一个这样的嵌套字典:
book={20:{'start':'2008','reason':'sold'},
21:{'start':'2009','reason':'returned'},
22:{'start':'2010','reason':'returned'}}
我想删除'reason'=='sold'的项目。
输出应该是这样的:
book={21:{'start':'2009','reason':'returned'},
22:{'start':'2010','reason':'returned'}}
这是我的代码无效:
for k, v in book:
if v == 'sold':
del book[k]
答案 0 :(得分:1)
您可以使用词典理解:
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'}}
答案 1 :(得分:0)
这可以通过一些调试来完成工作。
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语句以查看实际情况。
答案 2 :(得分:0)
试试这个:
{21: {'start': '2009', 'reason': 'returned'}, 22: {'start': '2010', 'reason': 'returned'}}
输出:
'reason'
我通过书籍词典进行迭代,然后检查字典中的'sold'
列是否为{{1}},如果是,则通过,如果它没有将其添加到新词典中字典