Найти - Пользователи
Полная версия: Проверка в dict полей на None + допусловия
Начало » Python для новичков » Проверка в dict полей на None + допусловия
1 2
k0st1an
Есть словарь:

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

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

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

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

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)

Норм или можно компактней сделать?
sp3
как то так можно
>>> 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
FishHook
k0st1an
Нужно как-то проверить данные итемы в словаре на None
Что значит “проверить”?
test = {'item1': None,
         'item2': None,
         'item3': None}
result=any(x==None for x in test.values())
print result
Этот код возвращает true, если хоть одно значение словаря == None. Я так понимаю слово “проверить”.
Это то, что Вы хотели?
k0st1an
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 Спасибо, надо обдумать подойдет ли мне. Куда элегантней чем у меня ))
sergeek
у тебя самого не учитывается
и один любой должен быть в не None
и на сам None нигде ничего не сравнивается. Он не будет различать его с нулями, пустыми строками, списками и тд
FishHook
x==None
is же
Soteric
Какие-то финты ушами со словарем :) Может быть вам класс завести?
FishHook
sergeek
is же
Да блин, я сейчас весь по уши в c#, прошу извинить если что
bismigalis
А нужен ли тут словарь в первую очередь?
k0st1an
sergeek
Да у меня там и не должно быть пусто, в любом случае должно быть что-то. А ноль проверят, список, только пустую строку не проверяем:

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

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

Soteric
То что я проверяю приходит из опций запуска программы. Все равно проверять и пихать по опциям в классе. Но может и имеет смысл, надо подумать.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB