Python中如何筛选字典数组里status为‘Won’的元素?
Python中如何筛选字典数组里status为‘Won’的元素?
嘿,我来帮你梳理下问题,顺便给你修正代码和更简洁的解法~
首先你的代码里有几个小问题,导致它跑不起来:
- 你的元素是字典,不是类实例,所以不能用
x.status来访问值,得用字典的键访问语法x["status"] - 列表的
append是方法,得用result.append(x),而不是append[i](这是把方法当成列表来索引了,完全不对) - Python对缩进要求很严格,你代码里的循环、判断、append这些语句都要正确缩进在函数内部
修正后的循环写法
先给你把代码改对:
def get_won_compositions(compositions): result = [] for item in compositions: if item["status"] == "Won": result.append(item) return result print(get_won_compositions(john_williams_compositions))
我把函数名改成了更清晰的get_won_compositions,参数名也不用list(避免和内置类型重名),这样代码可读性更好。
更Pythonic的列表推导式写法
在Python里,这种筛选列表元素的场景,用列表推导式会更简洁优雅,一行就能搞定:
won_compositions = [item for item in john_williams_compositions if item["status"] == "Won"] print(won_compositions)
这个写法和上面的循环逻辑完全一样,只是把整个筛选过程浓缩成了一行,是Python里处理这类问题的常用方式。
运行上面任意一种写法,你就能得到所有status为"Won"的字典组成的新数组啦~
备注:内容来源于stack exchange,提问作者Wolk9
相关产品推荐
相关产品推荐

