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

У меня есть список словарей, в которых я пытаюсь удалить любой словарь, если значение определенного ключа равно None, оно будет удалено.

item_dict = [
    {'code': 'aaa0000',
     'id': 415294,
     'index_range': '10-33',
     'location': 'A010',
     'type': 'True'},
    {'code': 'bbb1458',
     'id': 415575,
     'index_range': '30-62',
     'location': None,
     'type': 'True'},
    {'code': 'ccc3013',
     'id': 415575,
     'index_range': '14-59',
     'location': 'C041',
     'type': 'True'}
    ]


for item in item_dict:
    filtered = dict((k,v) for k,v in item.iteritems() if v is not None)


# Output Results
# Item - aaa0000 is missing
# {'index_range': '14-59', 'code': 'ccc3013', 'type': 'True', 'id': 415575, 'location': 'C041'}

В моем примере результат выводаотсутствует один из словарей, и если я попытался создать новый список для добавления filtered, элемент bbb1458 также будет включен в список.

Как я могу исправить это?

Ответы [ 2 ]

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

Вы можете создать новый список, используя понимание списка, фильтруя при условии, что все значения не None:

item_dict = [
    {'code': 'aaa0000',
     'id': 415294,
     'index_range': '10-33',
     'location': 'A010',
     'type': 'True'},
    {'code': 'bbb1458',
     'id': 415575,
     'index_range': '30-62',
     'location': None,
     'type': 'True'},
    {'code': 'ccc3013',
     'id': 415575,
     'index_range': '14-59',
     'location': 'C041',
     'type': 'True'}
    ]

filtered = [d for d in item_dict if all(value is not None for value in d.values())]
print(filtered)

#[{'index_range': '10-33', 'id': 415294, 'location': 'A010', 'type': 'True', 'code': 'aaa0000'}, {'index_range': '14-59', 'id': 415575, 'location': 'C041', 'type': 'True', 'code': 'ccc3013'}]
0 голосов
/ 26 мая 2018
[item for item in item_dict if None not in item.values()]

Каждый элемент в этом списке является словарем.И словарь добавляется в этот список, только если None не отображается в значениях словаря.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...