AJG
AJG

Reputation: 129

Removing nulls and empty objects of mixed data types from a dictionary

How would one go about cleaning a dictionary containing a variety of datatypes of nulls and empty lists, dicts etc. E.g.

raw = {'key': 'value', 'key1': [], 'key2': {}, 'key3': True, 'key4': None}

To:

refined = {'key': 'value', 'key3': true}

Because of the mixed nature of data types in the dictionary, using:

refined = {k:v for k,v in processed.items() if len(v)>0}

throws a

TypeError: object of type 'bool' has no len()

Is there a solution to make a second conditional based on type(v) is bool?

Edit: I've found the issue I was encountering employing solutions was a result of the structure of the data, asking a separate question to deal with that.

Upvotes: 0

Views: 90

Answers (2)

Ch3steR
Ch3steR

Reputation: 20669

You can try this.

refined={k:v for k,v in raw.items() if v or isinstance(v,bool)}

raw={'key': 'value',
 'key1': [],
 'key2': {},
 'key3': True,
 'key4': None,
 'key5': False}
refined={k:v for k,v in raw.items() if v or isinstance(v,bool)}
#{'key': 'value', 'key3': True, 'key5': False}

Upvotes: 2

Cedric Druck
Cedric Druck

Reputation: 1041

How about

refined = {k:v for k, v in processed.items() v is not None and (type(v) not in (list, dict) or len(v) > 0)}

Upvotes: 1

Related Questions