我有一个对象列表。对象具有 >10 个属性。我想制作一个仅包含类中特定属性子集的列表。
是否有任何内置函数可以做到这一点?或者,如果不是,那么最pythonic 的方法是什么?
我试过了,但我更喜欢用动态的方式来引用特定的属性(例如,传递字典或类似的解决方案,这将使我能够找出运行时的哪些属性)
filtered_list = [[object.attr1, object.attr2] for object in list_objects]
(解决方案可以只针对 Python 3)
答案 0 :(得分:1)
类似的东西
[[getattr(o, a) for a in ['attr1', 'attr2']] for o in objects]
应该这样做。
答案 1 :(得分:1)
如果你想要一个对象属性的字典列表:
# the list of attributes to get from each object
attrs = ['attr1', 'attr2']
# using dictionary comprehension to generate the list of attributes and their values
attr_vals_dict = [{a:getattr(o, a) for a in attrs} for o in objects]
输出:
[{'attr1': 1, 'attr2': 2}, {'attr1': 3, 'attr2': 4}, {'attr1': 'banana', 'attr2': 'apple'}]
至于首先获取动态属性列表,这已经得到了回答here。