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

时间:2018-05-22 23:10:05

标签: python dictionary nested

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

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] 

3 个答案:

答案 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}},如果是,则通过,如果它没有将其添加到新词典中字典