Я установил класс коллекции и создал объект, содержащий словарь.Я создал метод с именем pluck (self, key), который должен возвращать новую коллекцию со всеми значениями отправленного мной ключа, и я использую другой метод, который я создал ранее (map и filter - оба метода коллекции).
class Collection (объект):
def __init__(self,iterable = None):
# param iterable: imutable collection
if iterable == None:
self.Iterable = ()
else:
self.Iterable = tuple(iterable)
return None
def map(self, *callbacks):
'''
:param callbacks: List of function to apply on each element in 'self.Iterable'
:return: New mapped collection
'''
c =Collection(self.Iterable)
tmp = Collection()
for item in callbacks:
for item2 in c.Iterable:
tmp = tmp.append(item(item2))
c = Collection(tmp.Iterable)
return c
def filter(self, *callbacks):
'''
:param callbacks: List of function to apply on each element in 'self.Iterable'
:return: New filtered collection
'''
return Collection(item for item in self.Iterable if CallbacksFilter(item, callbacks) == True)
def CallbacksFilter(item, callback):
for f in callback:
if f(item) == False:
return False
return True
, когда я пытаюсь запустить метод pluck:
def pluck(self, key):
return self.values() if type(self.first()) is not dict else Collection(self.Iterable).filter(self.map(lambda x, y: dict([(i,x[i]) for i in x if i in set(y)])))
c3 = Collection([{'name': 'Joe', 'age': 20}, {'name': 'Jane', 'age': 13}])
c3.pluck('age')
Я ожидаю вывода «Collection (20,13)»но я получаю эту ошибку:
TypeError: () отсутствует 1 обязательный позиционный аргумент: 'y'
Как я могу исправить эту ошибку?
Примечание. Если внутренние элементы не являются словарями, возвращается копия текущей коллекции.