Skip to main content
 首页 » 编程设计

python之使用 python 过滤行的更好方法

2025年05月04日16leader

import pprint 
 
full_key_list = set(["F1", "F2", "F3", "F4", "F5"]) # all expected field 
filt_key_list = set(["F2", "F5"])                   # fields should not be included 
 
cont_list = []                                 # stores all filtered documents 
 
read_in_cont1 = { "F1" : 1, "F2" : True,  "F3" : 'abc', "F4" : 130, "F5" : 'X1Z'} # document1 
read_in_cont2 = { "F1" : 2, "F2" : False, "F3" : 'efg', "F4" : 100, "F5" : 'X4Z'} # document1 
read_in_cont3 = { "F1" : 3, "F2" : True,  "F3" : 'acd', "F4" : 400, "F5" : 'X2Z'} # document1 
 
# assume that read_in_conts contains list of documents 
read_in_conts = [read_in_cont1, read_in_cont2, read_in_cont3] 
 
for one_item in read_in_conts: # for each document in the list 
    cont_dict = {} 
    for key, value in one_item.iteritems(): 
        if key not in filt_key_list: # if the field should be included 
            cont_dict[key] = value   # add this field to the temporary document 
    cont_list.append(cont_dict) 
 
pprint.pprint(cont_list) 

输出:

[{'F1': 1, 'F3': 'abc', 'F4': 130}, 
 {'F1': 2, 'F3': 'efg', 'F4': 100}, 
 {'F1': 3, 'F3': 'acd', 'F4': 400}] 

这是我想要实现的:

给定原始文档集合(即用于模拟的 read_in_conts), 我需要过滤字段,以便它们不包含在进一步的过程中。多于 是我在 Python 中的实现。不过,我觉得太重了,期待看到 此任务的干净解决方案。

谢谢

请您参考如下方法:

cont_list = [dict((k,v) for k,v in d.iteritems() if k not in filt_key_list) 
             for d in read_in_conts] 

或者如果你想要一个稍微多一点的版本:

filter_out_keys = lambda d, x: dict((k,v) for k,v in d.iteritems() if k not in x) 
cont_list = [filter_out_keys(d, filt_key_list) for d in read_in_conts] 

附言我建议将 filt_key_list 改为 set() - 这将使 in 检查更快。