基于valu过滤defaultdict

2024-05-14 00:59:26 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下默认dict:

data = defaultdict(list)
data['key1'] = [{'check': '', 'sth1_1':'k1', 'sth1_2':'k2'}]
data['key2'] = [{'check': '0', 'sth2_1':'k3'}, {'check': 'asd', 'sth2_2':'k4'}, {'check':'1', 'sth2_3':'k5'}]

等等。。在

我想从data字典(从数据.值())哪个值'check' != '1'

对于上述输入,我希望:

^{pr2}$

到目前为止,我有:

for k, v in data.items():
    print "k, v: ", k, v
    v[:] = [d for d in v if d.get('check') == '1']

但是它给我的输出是不需要的'key1': []

defaultdict(<type 'list'>, {'key2': [{'sth2_3': 'k5', 'check': '1'}], 'key1': []})

什么是解决这个问题的最好的Python方法?在


Tags: infordatacheckk2k1dictlist
2条回答

这将在适当的地方做到这一点。如果你能编一本新词典的话,它可以清理一下。在

for key in data.keys():
    new_list = []
    for val in data[key]:
        if val['check'] == '1':
            new_list += [val]
    if new_list:
        data[key] = new_list
    else:
        del data[key]

如果您真的想使用(嵌套)理解,这也可以:

^{pr2}$

我认为这很简单:

for k,v in data.items():
    filtered_vals = list(filter(lambda i: i['check'] == '1', v)
    if len(filtered_vals):
        data[k] = filtered_vals
    else:
        del data[k]

或者如果你疯了:

^{pr2}$

相关问题 更多 >