Python3中PHP array_column的等效实现:从字典列表提取指定字段
Python3 替代for循环提取字典列表特定项的方法
我有一个字典列表,想要从每个字典中提取特定项,数据格式如下:
data = [ { "_id": "uuid", "_index": "my_index", "_score": 1, "_source": { "id" : 1, "price": 100 } }, { "_id": "uuid", "_index": "my_index", "_score": 1, "_source": { "id" : 2, "price": 150 } }, { "_id": "uuid", "_index": "my_index", "_score": 1, "_source": { "id" : 3, "price": 90 } } ]期望输出:
formatted_data = [ { "id": 1, "price": 100 }, { "id": 2, "price": 150 }, { "id": 3, "price": 90 } ]目前用for循环实现:
formatted_data = [] for item in data: formatted_data.append(item['_source'])想知道Python3里有没有类似PHP
array_column()的方法替代这个循环?
在Python里,你完全可以用更简洁的方式替代这个循环,下面给你两种常用的方案:
1. 列表推导式(最推荐)
这是Python处理这类场景最标准、最Pythonic的写法,一行代码搞定,可读性和执行效率都很棒:
formatted_data = [item['_source'] for item in data]
它和你写的for循环逻辑完全一致,但更紧凑,也是大多数Python开发者的首选写法。
2. 函数式风格:map() + lambda
如果你喜欢函数式编程的风格,也可以用map()配合匿名函数来实现:
formatted_data = list(map(lambda item: item['_source'], data))
需要注意的是,map()返回的是一个迭代器对象,所以要套一层list()把它转换成列表格式。这种写法也能达到目的,但相比列表推导式,可读性稍弱一些,所以一般更推荐前者。
另外提一句:Python标准库中并没有和PHP array_column() 完全等价的内置函数,但针对你这个简单的提取需求,上面两种方法已经足够简洁高效了。如果以后遇到更复杂的提取场景(比如需要处理键不存在的情况、提取嵌套更深的字段),你可以自己封装一个类似的工具函数,但当前场景下列表推导式就是最优解。
内容的提问来源于stack exchange,提问作者MH2K9
相关产品推荐
相关产品推荐

