Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 14, 2013 11:28:44

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

Есть словарь:

test = {'item1': None,
           'item2': None,
           'item3': None}

Нужно как-то проверить данные итемы в словаре на None. Но! Есть один итем который обязательный (пусть это будет item1) и один любой должен быть в не None. Как-то так:

test = {'item1': 12,
           'item2': 'Ivanov',
           'item3': None}

Как устроить проверку грамотно?? Ничего в голову не лезет (не ну кое-что лезет, но это бред).



—-
memento mori

Офлайн

#2 Апрель 14, 2013 11:51:19

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

Вот кое-что переделал:

if test['item1']:
        item_true = False
        for item in test:
            if item == 'item1':
                continue
            if test[item]:
                item_true = True
                break
        if not item_true:
            exit(1)

Норм или можно компактней сделать?



—-
memento mori

Офлайн

#3 Апрель 14, 2013 12:00:31

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

как то так можно

>>> def foo(dic,ignoreKey):
...     return any( [ dic[key] for key in dic if key != ignoreKey  ] )
>>> foo( {'item1': 12,
...       'item2': 'Ivanov',
...        'item3': None} ,
...     'item1')
True
>>> foo( {'item1': 12,
...        'item2': 0,
...        'item3': None} ,
...      'item1')
False



Офлайн

#4 Апрель 14, 2013 12:05:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

k0st1an
Нужно как-то проверить данные итемы в словаре на None
Что значит “проверить”?
test = {'item1': None,
         'item2': None,
         'item3': None}
result=any(x==None for x in test.values())
print result
Этот код возвращает true, если хоть одно значение словаря == None. Я так понимаю слово “проверить”.
Это то, что Вы хотели?



Офлайн

#5 Апрель 14, 2013 12:17:33

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

FishHook Пусть код скажет за меня (это мой вариант):

    if test['item1']:
        item_true = False
        for item in test:
            if item != 'item1':
                if test[item]:
                    item_true = True
                    break
        if not item_true:
            exit(1)

sp3 Спасибо, надо обдумать подойдет ли мне. Куда элегантней чем у меня ))



—-
memento mori

Офлайн

#6 Апрель 14, 2013 12:56:23

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

у тебя самого не учитывается

и один любой должен быть в не None
и на сам None нигде ничего не сравнивается. Он не будет различать его с нулями, пустыми строками, списками и тд
FishHook
x==None
is же

Офлайн

#7 Апрель 14, 2013 13:00:08

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

Какие-то финты ушами со словарем :) Может быть вам класс завести?



Офлайн

#8 Апрель 14, 2013 13:13:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

sergeek
is же
Да блин, я сейчас весь по уши в c#, прошу извинить если что



Офлайн

#9 Апрель 14, 2013 13:35:54

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

А нужен ли тут словарь в первую очередь?

Офлайн

#10 Апрель 14, 2013 13:44:19

k0st1an
Зарегистрирован: 2013-02-07
Сообщения: 86
Репутация: +  0  -
Профиль   Отправить e-mail  

Проверка в dict полей на None + допусловия

sergeek
Да у меня там и не должно быть пусто, в любом случае должно быть что-то. А ноль проверят, список, только пустую строку не проверяем:

>>> а = 0
>>> if a:
...     print('yes')
...
yes
>>> a = ''
>>> if a:
...     print('yes')
...
>>> a = [1, 4, 5, 6]
>>> if a:
...     print('yes')
...
yes

Но верно, не совсем точно проверяет. Но это можно докодить.

Soteric
То что я проверяю приходит из опций запуска программы. Все равно проверять и пихать по опциям в классе. Но может и имеет смысл, надо подумать.



—-
memento mori

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version