Сравните содержание словаря с объектом - PullRequest
3 голосов
/ 10 января 2012

У меня есть следующий объект

class LidarPropertiesField(object):
    osversion = ''
    lidarname = ''
    lat = 0.0
    longit = 0.0
    alt = 0.0
    pitch = 0.0
    yaw = 0.0
    roll = 0.0
    home_el = 0.0
    home_az = 0.0
    gps = 0
    vad = 0
    ppi = 0
    rhi = 0
    flex_traj = 0
    focuse = 0
    type = 0
    range_no = 0
    hard_target = 0
    dbid = 0

Также у меня есть словарь с такими же полями, возможно ли сравнить поля объекта с полями словаря в цикле for?

Ответы [ 2 ]

5 голосов
/ 10 января 2012

Предполагая, что dict называется d, будет проверяться, имеет ли LidarPropertiesField те же значения, что и d для всех ключей в d:

for k, v in d.iteritems():
     if getattr(LidarPropertiesField, k) != v:
         # difference found; note, an exception will be raised
         # if LidarPropertiesField has no attribute k

В качестве альтернативыпреобразовать класс в dict с чем-то вроде

dict((k, v) for k, v in LidarPropertiesField.__dict__.iteritems()
            if not k.startswith('_'))

и сравнить с ==.

Обратите внимание на пропуск всех атрибутов класса, начинающихся с _, чтобы избежать __doc__, __dict__, __module__ и __weakref__.

1 голос
/ 10 января 2012

Посмотрите на встроенную функцию getattr()

class Foo:
    bark = 0.0
    woof = 1.0

foo = Foo()

foo_dict = dict(bark = 1.0, woof = 1.0)
for k in foo_dict.keys():
    print 'Checking', k
    print getattr(foo, k)
    print foo_dict[k]
    if foo_dict[k] == getattr(foo, k):
        print '  matches'
    else:
        print '  no match'

Дает результат:

Checking woof
1.0
1.0
  matches
Checking bark
0.0
1.0
  no match
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...