aysh
aysh

Reputation: 599

How to get the keys if one of key is or '0' in dictionary

I have Dictionary is below, My product output is below. I need to create a new dictionary with two types Out_1, Out_2

product = {'Product1': {'index': '1', '1': 'Book', '2': 'Pencil', '3': 'Pen','value': '1'}, 
 'Product2': {'index': '2', '1': 'Marker', '2': 'MYSQL', '3': 'Scale','value': '0'}}

If value inside product is 0 then extract the keys

Expected Output

Out_1 = {'Product2': {1:'Marker': '2': 'Compass', '3': 'Scale', 'value': 0}}
Out_2 = {'Product2':['Marker','Compass','Scale', '0']}

Psuedo code is below. i tried to create but not able to create as above

Out_1 = {}
Out_2 = {i:[]}
for i,j in product.items():
  for a,b in j.items():
    if a['value'] == 0:
       Out_2.append(i)

I am getting indices error, How to get Out_1, Out_2

Upvotes: 0

Views: 507

Answers (3)

Pratik Joshi
Pratik Joshi

Reputation: 439

Here it is:

Code:

product = {'Product1': {'index': '1', '1': 'Book', '2': 'Pencil', '3': 'Pen','value': '1'}, 
 'Product2': {'index': '2', '1': 'Marker', '2': 'MYSQL', '3': 'Scale','value': '0'}}
output_1 = {}
output_2 = {}
for key,val in product.items():
    if (val['value'] == '0'):
        output_1[key]=val
        output_2[key]=val.values()
print(output_1)
print(output_2)

Output:

{'Product2': {'1': 'Marker', 'index': '2', '3': 'Scale', '2': 'MYSQL', 'value': '0'}}
{'Product2': ['Marker', '2', 'Scale', 'MYSQL', '0']}

Upvotes: 1

Sebastian
Sebastian

Reputation: 561

Hi do you really need this index variable? If not yes why would not you use list of dicts instead of dict of dicts. However here is what you wanted:

products = {'Product1': {'index': '1', '1': 'Book', '2': 'Pencil', '3': 'Pen','value': '1'}, 
 'Product2': {'index': '2', '1': 'Marker', '2': 'MYSQL', '3': 'Scale','value': '0'}}

for k,product in products.items():
    product.pop('index', None)
    if product['value'] == '0':
        products[k] = list(product.values())


print(products)
>>> {'Product1': {'1': 'Book', '2': 'Pencil', '3': 'Pen', 'value': '1'}, 'Product2': ['Marker', 'MYSQL', 'Scale', '0']}

I was not assigning it to any other variables like out1/2 in case you have more than 2 products

Upvotes: 1

taha
taha

Reputation: 722

You can use dict comprehensions for this.

out_1 = {k: v for k, v in product.items() if v['value']=='0'}
out_2 = {k: list(v.values()) for k, v in product.items() if v['value']=='0'}

Upvotes: 2

Related Questions