Вы можете сделать это с помощью , уменьшить .
concat
. reduce
мы проверяем, присутствует ли свойство объекта в output
, чем добавляем times
и other
в существующее свойство, если нет, то добавляем новое свойство.
const initial= [{name: 'a', times: 40, other: 50},{name: 'b', times: 10, other: 15},{name: 'c', times: 15, other: 12}];
const toBeMerged= [{name: 'a', times: 45, other: 30},{name: 'c', times: 10, other: 10},{name: 'd', times: 23, other: 10}];
let temp = initial.concat(toBeMerged)
let op = temp.reduce((output,current)=>{
if( output[current.name] ){
output[current.name].times += current.times
output[current.name].other += current.other
} else{
output[current.name] = current;
}
return output;
},{})
console.log(Object.values(op))
Если Вы хотите просто отобразить конкретный атрибут каждого экземпляра класса, можно сделать
print([obj.attr for obj in my_list_of_objs])
Который распечатает attr
атрибут каждого объекта в списке my_list_of_objs
. С другой стороны, можно определить __str__()
метод для Вашего класса, который указывает, как преобразовать Ваши объекты в строки:
class evolutions:
def __str__(self):
# return string representation of self
print(my_list_of_objs) # each object is now printed out according to its __str__() method
Вы захотите переопределить свой класс, "для строкового представления" метода:
class Foo:
def __str__(self):
return "String representation of me"
Контроль __ ул. __ () и __ repr __ () методы.
См. http://docs.python.org/reference/datamodel.html#object.__repr__
Я предпочитаю определять функцию __ repr __
, которая может восстанавливать объект (когда это возможно). Если у вас нет __ str __
, то и repr ()
и str ()
будут вызывать этот метод.
Так, например,
class Foo(object):
def __init__(self, a, b):
self.a = a
self.b = b
def __repr__(self):
return 'Foo(%r, %r)' % (self.a, self.b)
Делать это таким образом, у вас есть читаемая строковая версия, и в качестве бонуса ее можно получить, чтобы получить копию оригинального объекта.
x = Foo(5, 1 + 1)
y = eval(str(x))
print y
-> Foo(5, 2)