Python过滤字典列表

问题描述 投票:0回答:1

新手,请保持温柔。

我有一个生成har文件的硒脚本,代码如下:

proxy.har  # returns a HAR
for ent in proxy.har['log']['entries']:
    _url = ent['request']['headers']
    _response = ent['response']
    #print(ent)
    for item in ent['request']['headers']:
        print(item)

这里是输出:

{'value': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/5 (KHTML, like Gecko) Chrome/ Safari/', 'name': 'User-Agent'}
{'value': 'application/json', 'name': 'content-type'}
{'value': '8d14747f41e552da0076374b6646b1d309763357195e2ec5b6be6da1d12dcf6801113', 'name': 'a-security-token'}
{'value': '8e9720fcead251fafd2c215443e3c6e7555667990f00bcfad70127e340048eb901113', 'name': 'ccu'}
{'value': 'isAjax:true', 'name': 'ADRUM'}
{'value': '*/*', 'name': 'Accept'}

我想过滤掉a-security令牌值和ccu值。我已经尝试过使用lambda,但它只打印什么,这是我的lambda代码:

filtered_item = filter(lambda d: 'ccu' in d , item)
for d in filtered_item:
   print(d)
python python-3.x
1个回答
0
投票

以下列表理解应为您提供符合条件的所有values的列表:

filtered_items = [d['value'] for d in har_list if d['name'] in ['a-security-token', 'ccu']]

但是,如果这些项目仅在列表中每个出现一次,并且您想单独获得它们,则可以使用next方法,这也可以确保在找不到数据的情况下代码不会中断。 :

a_sec_token = next((d['value'] for d in har_list if d['name'] == 'a-security-token'), None)
ccu = next((d['value'] for d in har_list if d['name'] == 'ccu'), None)
© www.soinside.com 2019 - 2024. All rights reserved.