【发布时间】:2017-02-15 13:57:40
【问题描述】:
我正在尝试通过原始列表中对象的属性将 python 中的对象列表排序到列表字典中
我已经在下面完成了,但这感觉就像我应该能够使用字典理解来做的事情?
for position in totals["positions"]:
if not hasattr(totals["positions_dict"], position.get_asset_type_display()):
totals["positions_dict"][position.get_asset_type_display()] = []
totals["positions_dict"][position.get_asset_type_display()].append(position)
一些自我改进
totals["positions_dict"] = {}
for position in totals["positions"]:
key = position.get_asset_type_display()
if key not in totals["positions_dict"]:
totals["positions_dict"][key] = []
totals["positions_dict"][key].append(position)
【问题讨论】:
-
请发布一些您一直在处理的原始数据以重现您的问题。
-
似乎更需要
collections.defaultdict(list) -
不是您问题的答案,但您确定上面的代码有效吗?特别是hasattr?而你调用 position.get_asset_type_display() 三次来存储一个值。通过存储在中间变量中比在这里使用理解更好地提高效率。我认为这是可以做到的,但您最终检索数据的次数会比现在更多。
-
我认为它可能有一个错误,是的,在那些额外的调用中完全正确。在我知道代码导致瓶颈...并且可以正常工作之前,我通常会避免进行最小的优化!
标签: python list dictionary dictionary-comprehension