Найти - Пользователи
Полная версия: Корректная проверка ключа в словаре
Начало » Python для новичков » Корректная проверка ключа в словаре
1 2
izooomrud
Привет.
Как правильно проверить наличие ключа
 a[0]['test']
в таком словаре?
 a = [{"test": 1}]

Словарь формируется при ответе сервера и иногда может принять вид
 a = {"test": 1}
либо
 a = []

в таких случаях такая конструкция не работает

 a={"test": 1}
if a and 'test' in a[0] and 0 in a:
    print("true")
xam1816
izooomrud
Словарь формируется при ответе сервера и иногда может принять вид
Сначала написать код,который определяет какой тип информации пришел,список или словарь,потом наличие элемента
PEHDOM
izooomrud так в каком виде оно вам приходит?
 a = []
a = [{"test": 1}]
a = {"test": 1}
В первом єто список во втором список с словарем снутри, во третьем чистый словарь. Или в любом может прийти?
izooomrud
PEHDOM
izooomrud так в каком виде оно вам приходит?
да, может в любом, но меня интересует только этот
 a = [{"test": 1}]
и кстати, когда приходит чистый словарь, в нем нет ключа ‘test’
PEHDOM
izooomrud
да, может в любом, но меня интересует только этот
 def check_dict(obj):
    if obj and obj[0].get("test"):
        return True
    else:
        return False
a = []
print(check_dict(a))
a = [{"test": 1}]
print(check_dict(a))
a = [{"test2": 1}]
print(check_dict(a))
>>>
False
True
False
>>>
izooomrud
PEHDOM
def check_dict(obj):
if obj and obj.get(“test”):
return True
else:
return False
a =
print(check_dict(a))
a =
print(check_dict(a))
a =
print(check_dict(a))

это не учитывает случаев когда
 a = {"test": 1}
и условие виду этого нужно сделать что-то вроде
 if obj and obj[0].get("test") or obj.get("test"):
но оно почему-то не работает
marvellik
 def test(data, text):
    if isinstance(data, dict):
        return text in data.keys()
    elif isinstance(data, list):
        for val in data:
            if text in val.keys():
                return  True
    return  False
        
a = [{"test": 1}, {"test": 1}]
b = {"test": 1}
print(test(a, "test"))
print(test(b, "test"))
xam1816
izooomrud
в таком словаре?
"
 a = [{"test": 1}]
у тебя а- это список, в котором находится один словарь,
 if a[0]["test"]:# если что-то есть вернёт True
if a : # если что-то есть вернёт True
В другом случае у тебя a- это словарь,с элементом
 a = {"test": 1}
, вот только не надо спрашивать как проверить на существование элементов,это основы.
PEHDOM
izooomrud
это не учитывает случаев когда
ну так вы сами сказали
izooomrud
, но меня интересует только этот
  a = [{"test": 1}]

А так вам тогда нужно проверять на тип как выше уже советовали..
izooomrud
marvellik
 def test(data, text):
    if isinstance(data, dict):
        return text in data.keys()
    elif isinstance(data, list):
        for val in data:
            if text in val.keys():
                return  True
    return  False
        
a = [{"test": 1}, {"test": 1}]
b = {"test": 1}
print(test(a, "test"))
print(test(b, "test"))

Здесь return объявленный внутри цикла for возвращает результат работы функции и одновременно является break для цикла что ли?
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