Удалить ключ и значение из вложенных словарей? - PullRequest
0 голосов
/ 23 мая 2018

У меня есть вложенный словарь, подобный этому:

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] 

Ответы [ 3 ]

0 голосов
/ 23 мая 2018

Это выполняет работу с некоторыми отладочными материалами.

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, чтобы увидеть, что на самом деле происходит.

0 голосов
/ 23 мая 2018

попробуйте это:

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' или нет, если это так, передайте, если это не добавить его в новый словарь

0 голосов
/ 23 мая 2018

Вы можете использовать словарь понимания:

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'}}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...