Python遍历字典列表,筛选number为123的条目生成新列表
解决方案
方法一:普通for循环(直观易懂)
这种方法逻辑清晰,逐个遍历列表中的字典,判断条件后添加对应值:
data = [ {'name': 'sravan'}, {'name': 'bobby'}, {'name': 'ojsawi', 'number': '123'}, {'name': 'rohith', 'number': '456'}, {'name': 'gnanesh', 'number': '123'} ] new_list = [] for item in data: # 用get方法避免键不存在时抛出KeyError if item.get('number') == '123': new_list.append(item['name']) else: new_list.append(0) print(new_list) # 输出: [0, 0, 'ojsawi', 0, 'gnanesh']
方法二:列表推导式(简洁高效)
用一行代码完成逻辑,是更Pythonic的写法:
data = [ {'name': 'sravan'}, {'name': 'bobby'}, {'name': 'ojsawi', 'number': '123'}, {'name': 'rohith', 'number': '456'}, {'name': 'gnanesh', 'number': '123'} ] new_list = [item['name'] if item.get('number') == '123' else 0 for item in data] print(new_list) # 输出: [0, 0, 'ojsawi', 0, 'gnanesh']
对你之前尝试方法的小建议
- 二维循环完全没必要,每个元素是独立字典,不需要嵌套遍历;
- 若想用lambda结合filter,filter只能筛选符合条件的字典,但没法直接生成0,需要额外处理不符合条件的位置,反而不如上面两种方法直接高效。
内容的提问来源于stack exchange,提问作者GutzeK456
相关产品推荐
相关产品推荐

