{'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个容器?</ p>
我无法使用:
for i in partner_output['result']['result']:
if "InProduction" in i['State']:
del partner_output['result'][i]
因为我收到错误:
TypeError: unhashable type: 'dict'
所以我现在不知道该怎么做: - (
答案 0 :(得分:2)
您可以使用列表推导替换整个列表,保留其他项目:
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]
),但是您不能在循环中执行此操作,因为它具有{ {3}}