如何筛选列表中符合值条件的字典?修正代码实现匹配service为flipkart
问题分析与修正方案
嘿,我来帮你看看问题出在哪~你的filter用法里藏了个小错误:在lambda表达式中,你写了(line['service'] for line in result) == 'flipkart',这其实是把一个生成器对象和字符串'flipkart'做比较,这两者永远不可能相等,所以filter自然返回空迭代器啦。
正确的思路很简单:filter的lambda参数x就是列表里的每一个字典元素,你只需要直接判断这个字典的'service'字段是否等于'flipkart'就行。另外要注意,Python3里filter()返回的是迭代器对象,不是列表,需要用list()把它转成列表才能看到具体内容。
修正后的代码
result = [{"origin_location":'original', 'service':'amazon'}, {"origin_location":"duplicate", 'service':'flipkart'}] # 正确的filter用法 filtered_result = list(filter(lambda x: x['service'] == 'flipkart', result)) print("Result= ", filtered_result)
更直观的替代方案:列表推导式
其实在Python里,列表推导式处理这种过滤场景往往更易读,写法如下:
result = [{"origin_location":'original', 'service':'amazon'}, {"origin_location":"duplicate", 'service':'flipkart'}] filtered_result = [item for item in result if item['service'] == 'flipkart'] print("Result= ", filtered_result)
两种写法都会输出你期望的结果:
Result= [{'origin_location': 'duplicate', 'service': 'flipkart'}]
内容的提问来源于stack exchange,提问作者DGL
相关产品推荐
相关产品推荐

