开发者问题收集

从字典中删除混合数据类型的空值和空对象

2020-02-24
85

如何清理包含各种数据类型的字典,包括空值、空列表、字典等。例如

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

致:

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

由于字典中数据类型的混合性质,使用:

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

抛出

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

是否有解决方案可以根据 type(v) is bool 制定第二个条件?

编辑:我发现我在使用解决方案时遇到的问题是由于数据的结构造成的,因此提出了一个单独的问题来解决这个问题。

2个回答

你可以试试这个。

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}
Ch3steR
2020-02-24

怎么样

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

Cedric Druck
2020-02-24