Python3 удалить весь вложенный словарь - PullRequest
0 голосов
/ 24 мая 2018
{'result':{'result':[
         {
            'Company':{
               'PostAddress':None
            },
            'ExternalPartnerProperties':None,
            'Id':123456,
            'Level':'Level1',
            'Name':'Name1',
            'ParentId':456789,
            'State':'InTrial',
            'TrialExpirationTime':1435431669
         },
         {
            'Company':{
               'PostAddress':None
            },
            'ExternalPartnerProperties':None,
            'Id':575155,
            'Level':'Level2',
            'Name':'Name2',
            'ParentId':456789,
            'State':'InTrial',
            'TrialExpirationTime':1491590226
         },
         {
            'Company':{
               'PostAddress':None
            },
            'ExternalPartnerProperties':None,
            'Id':888888,
            'Level':'Level2',
            'Name':'Name3',
            'ParentId':456789,
            'State':'InProduction',
            'TrialExpirationTime':1493280310
         },

Мой код:

for i in partner_output['result']['result']:
    if "InProduction" in i['State']:
        del i['Company'], i['ExternalPartnerProperties'], i['Id'], i['Level'], i['Name'], i['ParentId'], i['State'], i['TrialExpirationTime']

Если я сделаю это, я верну следующий результат

{'result': {'result': [{
            'Company':{
               'PostAddress':None
            },
            'ExternalPartnerProperties':None,
            'Id':123456,
            'Level':'Level1',
            'Name':'Name1',
            'ParentId':456789,
            'State':'InTrial',
            'TrialExpirationTime':1435431669
         },
         {
            'Company':{
               'PostAddress':None
            },
            'ExternalPartnerProperties':None,
            'Id':575155,
            'Level':'Level2',
            'Name':'Name2',
            'ParentId':456789,
            'State':'InTrial',
            'TrialExpirationTime':1491590226
         },
         {},

, но общее количество элементов по-прежнему 3 ...3-й контейнер просто пустой, но все же контейнер.Как я могу удалить 3-й контейнер все вместе?

Я не могу использовать:

for i in partner_output['result']['result']:
    if "InProduction" in i['State']:
        del partner_output['result'][i]

, потому что я получаю ошибку:

TypeError: unhashable type: 'dict'

Так что я не знаючто теперь делать: - (

1 Ответ

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

Вы можете использовать понимание списка для замены всего списка, сохраняя другие элементы:

partner_output['result']['result'] = [
    i for i in partner_output['result']['result']
    if i['State'] != "InProduction"
]

Обратите внимание, что тест для фильтра был отменен;Вы хотите сохранить все элементы, для которых 'State' не установлен на InProduction.Либо сохраните значения, для которых установлено состояние InTrial:

partner_output['result']['result'] = [
    i for i in partner_output['result']['result']
    if i['State'] == "InTrial"
]

Вторая попытка не удалась, поскольку вы пытались использовать i, ссылку на словарь, в качестве ключа в внешний partner_output['result'] словарь.Если вы хотите удалить что-то из списка partner_output['result']['result'], вам нужно использовать целочисленный индекс (del partner_output['result']['result'][2]), но вы не можете сделать это в цикле, потому что это имеет последствия для forзацикливание прогресса по списку .

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