我有一个Animal
个对象列表需要按2个属性species
和gender
组合在一起,而第三个属性amount
需要加起来。
你将如何做到这一点?任何帮助非常感谢!
初始列表
[
zoo.append(Animal('lion', 'male', 10))
zoo.append(Animal('lion', 'male', 20))
zoo.append(Animal('lion', 'female', 50))
zoo.append(Animal('lion', 'female', 10))
zoo.append(Animal('eagle', 'male', 1))
zoo.append(Animal('eagle', 'male', 3))
]
预期清单:
[
Animal('lion', 'male', 30),
Animal('lion', 'female', 60),
Animal('eagle', 'male', 4)
]
尝试失败:
class Animal(object):
def __init__(self, species, gender, amount):
self.species = species
self.gender = gender
self.amount = amount
# need help with this function
def simplify(zoo):
simplifiedZoo = []
for animal in zoo:
key = animal.species
d[key].append(...)
return simplifiedZoo
# Create initial list
zoo = []
zoo.append(Animal('lion', 'male', 10))
zoo.append(Animal('lion', 'male', 20))
zoo.append(Animal('lion', 'female', 50))
zoo.append(Animal('lion', 'female', 10))
zoo.append(Animal('eagle', 'male', 1))
zoo.append(Animal('eagle', 'male', 3))
# Simplify list
simplify(zoo)
答案 0 :(得分:2)
您可以使用defaultdict
来避免在求和时出现颠簸的密钥存在检查。使用tuples
和 species
的{{1}}作为关键:
gender
答案 1 :(得分:2)
没有任何图书馆
def simplify(zoo):
simplifiedZoo = {}
for animal in zoo:
try:
simplifiedZoo[(animal.species, animal.gender)].amount += animal.amount
except KeyError:
simplifiedZoo[(animal.species, animal.gender)] = animal
return [x for x in simplifiedZoo.values()]