使用过滤器/映射压缩for循环

时间:2018-11-01 05:26:10

标签: python

是否可以编写filtermap作为单行代码执行以下操作?

formatted_data = []
for hit in res['hits']['hits'][:201]:
    src = hit['_source']
    formatted_data.append({
        'path': src['path'],
        'size': src['size'],
        'last_modified': dateutil.parser.parse(src['last_modified']).date()
    })

2 个答案:

答案 0 :(得分:2)

这将是非常丑陋的:

formatted_data = [ {
        'path': hit['_source']['path'],
        'size': hit['_source']['size'],
        'last_modified': dateutil.parser.parse(hit['_source']['last_modified']).date()
} for hit in res['hits']['hits'][:201] ]

但是您可以根据需要将其拉伸成一行。

答案 1 :(得分:2)

这是我想出的使用map和lamda函数的oneliner。但它的可读性较差

formatted_data=map(lambda x : {'path':x['_source']['path'],'size': x["_source"]['size'],'last_modified': dateutil.parser.parse(x["_source"]['last_modified']).date() },res['hits']['hits'][:201])

我认为,如果您真的想使用map,请编写另一个函数,使其更具可读性,例如

def returndict(x):
        return {
                'path':x['_source']['path'],
                'size': x['_source']['size'],
                'last_modified': dateutil.parser.parse(x['_source']['last_modified']).date() 
        }
print(map(returndict,res['hits']['hits'][:201])])

我想引用zen of python

  

美丽胜于丑陋。显式胜于隐式。

     

简单胜于复杂。复杂胜于复杂。

     

平面比嵌套更好。稀疏胜于密集。

     

可读性计数。