基于字典特定键创建列表:如何过滤列表中所有男/女性姓名?
解决方法
要从给定的字典列表里过滤出女性或男性的姓名,不用写复杂的lambda,用列表推导式就能简单搞定:
example = [ {'name':'Jane','gender':'female'}, {'name':'Ben','gender':'male'}, {'name':'Kate','gender':'female'}, {'name':'James','gender':'male'}, {'name':'Lilly','gender':'female'}, {'name':'Sam','gender':'male'}, {'name':'Grace','gender':'female'}, {'name':'Dan','gender':'male'} ] # 提取所有女性姓名 female_names = [p['name'] for p in example if p['gender'] == 'female'] print(female_names) # 输出: ['Jane', 'Kate', 'Lilly', 'Grace'] # 提取所有男性姓名 male_names = [p['name'] for p in example if p['gender'] == 'male'] print(male_names) # 输出: ['Ben', 'James', 'Sam', 'Dan']
如果需要保留完整的字典结构(而不是只提取姓名),可以这样写:
# 过滤出所有女性的字典 female_people = [p for p in example if p['gender'] == 'female'] print(female_people)
你的原代码问题分析
- 自定义的
dictfiltlambda完全多余——原列表里的每个字典本身就只有name和gender两个键,提取这两个键等于没做任何有效过滤。 - 循环中每次给
result赋值,最终result只会保留最后一个字典(也就是Dan的那条数据),所以后面的循环只处理了这一条数据。 - 最后的判断条件
value == 'one_day'完全错误,你需要判断的是gender字段等于female或male。
内容的提问来源于stack exchange,提问作者Michael Joseph
相关产品推荐
相关产品推荐

