【发布时间】:2013-12-13 00:58:08
【问题描述】:
我有一个对象列表,需要获取一个属性具有相同值的所有对象以进一步处理它们。我在谷歌上搜索到的所有内容都已经知道我正在寻找的价值。相反,我只需要火柴。说我有这个
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p1 = Person("mike", 28)
p2 = Person("joe", 28)
p3 = Person("nick", 27)
p4 = Person("Janet", 27)
people = [p1, p2, p3]
#need something like
matches = getMatches(people, "age")
print matches
[[Mike's object, Joe' Object], [Nick's object, Janet's object]]
我想出了这个并且它有效,但对我来说似乎有点蹩脚
def getMatches(objs, attr):
def Gen(objs, attr):
used = [] #already searched for these...
for obj in objs:
a = getattr(obj, attr)
if a not in used:
yield [p for p in objs if getattr(p, attr) == a]
used.append(a)
gen = Gen(objs, attr)
return [g for g in gen]
在我的实际代码中,需要这个更有意义。任何人都可以帮我清理这个问题吗?或者是否有标准的功能或方法来完成这个我只是不知道?
我很欣赏这些答案,最终使用 groupby 并确保首先对其进行排序。这是我第一次尝试编写生成器。如果我可能会问,可以这么说,是什么让我的代码正确和 Pythonic?
【问题讨论】:
标签: python list attributes generator