Kamil_K
Kamil_K

Reputation: 63

How check if values of keys in list of dictionaries are both equal 0

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

Answers (3)

ComplicatedPhenomenon
ComplicatedPhenomenon

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

Patrick Artner
Patrick Artner

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

sujeet14108
sujeet14108

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

Related Questions