Reputation: 63
I have a list of dictionaries like:
dicts = [dict1,dict2,dict3,dict4]
dict1 = [{'name': 'blue', 'y': 1}, {'something else': 'red', 'y': 0}]
dict2 = [{'name': 'green', 'y': 0}, {'name': 'purple', 'y':2}]
dicts are list of dictionaries
How can I check if both values in dict1 first and second y value is 0 etc. If dict have both y == 0 then assign empty array
I have tried also something like this but have to repeat this so many times for each dict
check = 0
for el in dict1:
if el['y'] == 0:
check += 1
if check == len(dict1):
dict1 = []
for el in dicts:
for y in el:
if all(x == 0 for x in y.values()):
el = []
Upvotes: 1
Views: 1260
Reputation: 4189
[[] if all([i['y']==0 for i in item]) else item for item in dicts]
Take example
dict1 = [{'name': 'blue', 'y': 1}, {'something else': 'red', 'y': 0}]
dict2 = [{'name': 'green', 'y': 0}, {'name': 'purple', 'y':2}]
dict3 = [{'name': 'green', 'y': 0}, {'name': 'purple', 'y':0}]
dict4 = [{'name': 'green', 'y': 0}, {'name': 'purple', 'y':2}]
dicts = [dict1,dict2,dict3,dict4]
The output would be
[[{'name': 'blue', 'y': 1}, {'something else': 'red', 'y': 0}],
[{'name': 'green', 'y': 0}, {'name': 'purple', 'y': 2}],
[],
[{'name': 'green', 'y': 0}, {'name': 'purple', 'y': 2}]]
Upvotes: 0
Reputation: 51653
If a one-line solution is too complex, split up the task and enumerate your dicts
to replace the element you checked to have all {"y":0}
:
dict1 = [{'name': 'blue', 'y': 1}, {'something else': 'red', 'y': 0}]
dict2 = [{'name': 'green', 'y': 0}, {'name': 'purple', 'y':2}]
dict3 = [{'name': 'green', 'y': 0}, {'name': 'purple', 'y':0}]
dict4 = [{'name': 'green', 'y': 0}, {'name': 'purple', 'y':2}]
dicts = [dict1,dict2,dict3,dict4]
for i,d in enumerate(dicts):
zeros = all(i["y"]== 0 for i in d) # check if all are 0
if zeros:
dicts[i] = [] # if so replace element in dicts by []
print (dicts)
Outputs:
[[{'name': 'blue', 'y': 1}, {'something else': 'red', 'y': 0}],
[{'name': 'green', 'y': 0}, {'name': 'purple', 'y': 2}],
[],
[{'name': 'green', 'y': 0}, {'name': 'purple', 'y': 2}]]
Upvotes: 0
Reputation: 568
You need something like this.
dicts=[]
new_dicts=[]
for dic in dicts:
flag=0
for el in dic:
if el['y']!=0:
flag=1
break
if flag==0:
new_dict.append([])
else:
new_dict.append(dic)
Upvotes: 1