这可以在python的一行中完成吗?

时间:2016-11-04 21:30:56

标签: python

我觉得这可以在一行中完成,但我找不到办法。

# final_list is what I want as an output
final_list = []

for x in some_list:
   # y is a dictionary
   y = x.get_some_dict()

   # Want to add a new key/value pair to y, which comes from x
   y.update({"new_key": x.property_in_x})
   # append y to the output list
   final_list.append(y)

return final_list

3 个答案:

答案 0 :(得分:2)

我不建议将其折叠成单行列表理解。它可以做到,但它的风格很糟糕。列表推导不应该有副作用(即调用update)。

您可以替换与生成器附加的显式列表。这不是一个坏主意。 d[k] = vd.update({k: v})简单。

def final_list(some_list):
    for x in some_list:
        y = x.get_some_dict()
        y["new_key"] = x.property_in_x
        yield y

答案 1 :(得分:0)

下面是等效的列表理解表达式以及for循环:

final_list = [x.get_some_dict() for x in some_list]
for dict_item, base_item in zip(final_list, some_list):
    dict_item["new_key"] = base_item.property_in_x

答案 2 :(得分:0)

我不建议将它阻尼成一个衬里,这可能(可能)凌乱且难以理解。此外,update对单线程解决方案产生了问题。

但是,在我看来,这可以简化,更清楚: (缩短,但不是不可读的一个班轮)

for x in some_list:
    x.get_some_dict().update({"new_key": x.property_in_x})
final_list = [y.get_some_dict() for y in some_list]