我上课。我们将说该类具有以下属性:年龄,身高,体重,智商。
我想在所有类别中打印此对象的前5个实例。例如,最老的5个,最聪明的5个,最高的5个。
我想使用1个可以通过4种不同方式调用的函数来完成此操作。
例如:
display:none
理论上,我可以这样称呼它 topNOfAttribute(people,'age') topNOfAttribute(people,'height')
而不是创建4个功能,年龄是1个,身高是1个,等等。
答案 0 :(得分:2)
使用getattr
def topNOfAttribute(people, attr_name, num=5):
sorted_people = sorted(people, key=lambda x: getattr(x, attr_name), reverse=True)
toDisplay = sorted_people[:num]
print toDisplay
用法:
topNOfAttribute(people, 'age')
我还简化了使用切片获得前n位的方式。在函数中更改参数通常不好。因此,请在sorted
答案 1 :(得分:0)
使用getattr,可以轻松地将其变成单线。
from pprint import pprint
class Student(object):
def __init__(self, age, height, weight, iq):
self.age = age
self.height = height
self.weight = weight
self.iq = iq
def __repr__(self):
return str({'age': self.age, 'height': self.height, 'weight': self.weight, 'iq': self.iq})
def top(objects, attr, num=5):
return sorted(objects, key=lambda x: getattr(x, attr), reverse=True)[:num]
students = [
Student(age=21, height=127, weight=168, iq=120),
Student(age=24, height=120, weight=120, iq=50),
Student(age=19, height=110, weight=400, iq=90),
Student(age=30, height=190, weight=30, iq=92),
Student(age=31, height=180, weight=168, iq=77),
Student(age=42, height=169, weight=168, iq=98)
]
pprint(top(students, 'iq'))
[{'age': 21, 'iq': 120, 'weight': 168, 'height': 127},
{'age': 42, 'iq': 98, 'weight': 168, 'height': 169},
{'age': 30, 'iq': 92, 'weight': 30, 'height': 190},
{'age': 19, 'iq': 90, 'weight': 400, 'height': 110},
{'age': 31, 'iq': 77, 'weight': 168, 'height': 180}]