方便的方式来摆脱一些字段使用列表推导



那么,想象这样一个项目:

x = {"name":"blah",
"this_must_go":"obsolette",
"this_must_also_go":"unfixable",
"type":4}

,假设我有一个包含200个x的列表,我想从列表中的所有x中删除所有this_must_gothis_must_also_go字段,没有例外。如果可能的话,我更喜欢使用列表推导式。是否有一行或简洁的语法来实现这一点?

使用包含字典推导式的列表推导式

fields_to_delete = {'this_must_go', 'this_must_also_go'}
new_list = [{k: v for k, v in x.items() if k not in fields_to_delete} 
for x in original_list]

您可以使用字典键像集合一样的事实,并在列表推导式中减去不需要的键。

to_drop = {'this_must_go', 'this_must_also_go'}
xs = [
{"name":"blah1", "this_must_go":"obsolette", "this_must_also_go":"unfixable", "type":4},
{"name":"blah2", "this_must_go":"obsolette", "this_must_also_go":"unfixable", "type":5},
{"name":"blah3", "this_must_go":"obsolette", "this_must_also_go":"unfixable", "type":6}
]
[{k:x[k] for k in x.keys() - to_drop} for x in xs]

这将给新的字典在列表中,如:

[
{'type': 4, 'name': 'blah1'},
{'type': 5, 'name': 'blah2'},
{'type': 6, 'name': 'blah3'}
]

python化:

[
{
k: v
for k, v in d.items() if k not in ['this_must_go', 'this_must_also_go']
}
for d in your_list
]

最新更新