Reputation: 363
I have a couple of pieces of logic within my code where I remove either a key/value or dictionary if the conditions are met. These objects remove while they are in the list, but once they are appended to a top level dictionary and turned into a JSON object, they re-appear, hence negating my logic. What could be the cause of this?
Here is my code sample showing how the dictionaries are appended logic removing keys/values and dictionaries;
dL311 = dict()
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_1)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_1 )
d.setdefault("DACItemCount", dar_qyt_1)
l311.append(d)
dL311 = dict()
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_2)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_2)
d.setdefault("DACItemCount", dar_qyt_2)
l311.append(d)
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_3)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_3)
d.setdefault("DACItemCount", dar_qyt_3)
l311.append(d)
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_4)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_4)
d.setdefault("DACItemCount", dar_qyt_4)
l311.append(d)
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_5)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_5)
d.setdefault("DACItemCount", dar_qyt_5)
l311.append(d)
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_6)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_6)
d.setdefault("DACItemCount", dar_qyt_6)
l311.append(d)
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_7)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_7)
d.setdefault("DACItemCount", dar_qyt_7)
l311.append(d)
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_8)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_8)
d.setdefault("DACItemCount", dar_qyt_8)
l311.append(d)
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_9)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_9)
d.setdefault("DACItemCount", dar_qyt_9)
l311.append(d)
d = dict()
d.setdefault("DriverFirstName",last_edited_user )
d.setdefault("DriverLastName","Aguilar" )
d.setdefault("LastUpdatedBy", "SANSTAR1")
d.setdefault("DACType", dar_item_10)
d.setdefault("Type", "Dead Animal Removal")
d.setdefault("Name", dar_uid_10)
d.setdefault("DACItemCount", dar_qyt_10)
l311.append(d)
for d in l311:
if(d['Name'].strip() == '') and((type(d['DACItemCount']) != int) or (d['DACItemCount']==0)):
del d['Name']
del d['DACItemCount']
lIndexes = []
nCnt = len(l311)
for i in range(nCnt):
dd = l311[i]
if(dd==d):
lIndexes.append(i)
for i in lIndexes:
i
#remove the d from the original l311 in a reverse order:
# print ("order (of index) in which items are deleted:" )
for ii in reversed(lIndexes):
if d.setdefault("Name", dar_uid_10) == ' ':
# print(ii)
del l311[ii]
print (l311)
dL311 = dict()
dL311.setdefault("DeadAnimalRemoval", l311)
dResult.setdefault("ListOfLa311DeadAnimalRemoval",dL311)
#Ends of adding additional itmes ****************************************
lResults.append({"MetaData": {}, "SRData": dResult})
Example Output using the code above;
[{'Name': '071920150633557841', 'DACType': ' ', 'DriverLastName': 'Aguilar', 'DriverFirstName': 'SA', 'LastUpdatedBy': 'SANSTAR1', 'DACItemCount': '0', 'Type': 'Dead Animal Removal'}]
JSON output without removed dictionaries;
{
"MetaData": {},
"SRData": {
"ListOfLa311DeadAnimalRemoval": {
"DeadAnimalRemoval": [
{
"DACItemCount": "0",
"DACType": " ",
"DriverFirstName": "SA",
"DriverLastName": "Aguilar",
"LastUpdatedBy": "SANSTAR1",
"Name": "071920150633557841",
"Type": "Dead Animal Removal"
},
{
"DACType": " ",
"DriverFirstName": "SA",
"DriverLastName": "Aguilar",
"LastUpdatedBy": "SANSTAR1",
"Name": " ",
"Type": "Dead Animal Removal"
}
]
},
"ReasonCode": "",
"ResolutionCode": "A",
"SRNumber": "1-21630001"
}
}
]
I am expecting to have the second dictionary removed since there is no 'Name' value.
Upvotes: 0
Views: 49
Reputation: 8137
If you delete a name, then if d.setdefault("Name", dar_uid_10) == ' '
will add the name back -- as dar_uid_10. Unless dar_uid_10 == ' ', then this code will never think that a dictionary has a name that is a space.
Just use if 'Name' not in d
instead, I think.
Upvotes: 1