Python, массив объектов

Допустим есть массив объектов:

array = [{'x': x, 'y': y, 'unique': True}, 
         {'x': x, 'y': y}, 
         {'x': x, 'y': y, 'unique': True}]

Перебираю, но как проверить есть ли у объекта свойство unique


Ответы (2 шт):

Автор решения: Andre
array = [{'x': 'x', 'y': 'y', 'unique': True}, 
         {'x': 'x', 'y': 'y'}, 
         {'x': 'x', 'y': 'y', 'unique': True}]

for dict in array:
  if 'unique' in dict:
    print(True)
  else:
    print(False)

#True
#False
#True

Взято отсюда.

→ Ссылка
Автор решения: SergFSM

Если рассматривать ваш array буквально, как вы выразились, "массив объектов", то это список объектов класса dict и его ключи не являются атрибутами:

d = {'x': x, 'y': y, 'unique': True}
getattr(d, 'unique')
'''
AttributeError: 'dict' object has no attribute 'unique'

Если вы хотите чтобы ключи были именно атрибутами, то можно сделать из словарей объекты класса. Тогда у них будут соответствующие свойства и, как вы и хотите, можно будет проверить наличие нужного свойства. Например, примерно так:

array = [{'x': x, 'y': y, 'unique': True}, 
         {'x': x, 'y': y}, 
         {'x': x, 'y': y, 'unique': True}]

class Unique:
    def __init__(self, d):
        self.__dict__ = d

array = [Unique(d) for d in array]

for u in array:
    print(hasattr(u, 'unique'))
'''
True
False
True

Но если вы хотите, чтобы объекты массива остались словарями и при этом у них еще были и свойства, то это тоже можно. Создаем класс, наследуясь от класса dict. Примерно так:

array = [{'x': x, 'y': y, 'unique': True}, 
         {'x': x, 'y': y}, 
         {'x': x, 'y': y, 'unique': True}]

class UniqueDict(dict):
    def __init__(self, d):
        super().__init__(d)
        self.__dict__ = self
        
d_array = [UniqueDict(d) for d in array]

d_array[0]
'''
{'x': 'X', 'y': 'Y', 'unique': True}
'''
d_array[0].unique
'''
True

Если же вам просто нужна проверка наличия в словаре определенного ключа, то тут уже рассказали как это сделать.

→ Ссылка