Python:如何获取字典列表中Year属性的首个出现值
解决方法
先说说你之前代码的问题:
- 第一个代码里用
hasattr(x,'Year')是错误的,字典的键不属于对象属性,判断字典是否包含某个键应该用'Year' in x,所以你之前的列表推导式会生成空列表,自然触发索引越界错误。 - 第二个循环里的
any('Year' in x for x in dataset)犯了变量名冲突的问题:生成器里的x覆盖了外层循环的x,导致每次都是检查整个数据集里是否存在Year,而非当前遍历的元素,所以所有输出都是True。
要获取首次出现的Year值,单行代码推荐用next()配合生成器表达式——它找到第一个符合条件的元素就会停止遍历,比列表推导式更高效:
next(x['Year'] for x in dataset if 'Year' in x)
如果担心数据集里可能没有任何带Year的元素,怕抛出StopIteration错误,可以给next()加个默认值:
next((x['Year'] for x in dataset if 'Year' in x), None)
这样找不到时会返回None,不会报错。
内容的提问来源于stack exchange,提问作者CrazyCoder
相关产品推荐
相关产品推荐

