Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 4, 2021 09:56:48

izooomrud
Зарегистрирован: 2021-01-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

Привет.
Как правильно проверить наличие ключа

 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")

Отредактировано izooomrud (Фев. 4, 2021 10:21:15)

Офлайн

#2 Фев. 4, 2021 10:39:52

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1372
Репутация: +  121  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

izooomrud
Словарь формируется при ответе сервера и иногда может принять вид
Сначала написать код,который определяет какой тип информации пришел,список или словарь,потом наличие элемента

Офлайн

#3 Фев. 4, 2021 10:46:11

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

izooomrud так в каком виде оно вам приходит?

 a = []
a = [{"test": 1}]
a = {"test": 1}
В первом єто список во втором список с словарем снутри, во третьем чистый словарь. Или в любом может прийти?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#4 Фев. 4, 2021 10:47:19

izooomrud
Зарегистрирован: 2021-01-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

PEHDOM
izooomrud так в каком виде оно вам приходит?
да, может в любом, но меня интересует только этот
 a = [{"test": 1}]
и кстати, когда приходит чистый словарь, в нем нет ключа ‘test’

Отредактировано izooomrud (Фев. 4, 2021 10:48:58)

Офлайн

#5 Фев. 4, 2021 10:55:28

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

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
>>>



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#6 Фев. 4, 2021 13:11:07

izooomrud
Зарегистрирован: 2021-01-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

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"):
но оно почему-то не работает

Отредактировано izooomrud (Фев. 4, 2021 14:21:35)

Офлайн

#7 Фев. 4, 2021 14:34:46

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

 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"))

Офлайн

#8 Фев. 4, 2021 14:45:42

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1372
Репутация: +  121  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

izooomrud
в таком словаре?
"
 a = [{"test": 1}]
у тебя а- это список, в котором находится один словарь,
 if a[0]["test"]:# если что-то есть вернёт True
if a : # если что-то есть вернёт True
В другом случае у тебя a- это словарь,с элементом
 a = {"test": 1}
, вот только не надо спрашивать как проверить на существование элементов,это основы.

Отредактировано xam1816 (Фев. 4, 2021 16:22:39)

Офлайн

#9 Фев. 4, 2021 14:46:39

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

izooomrud
это не учитывает случаев когда
ну так вы сами сказали
izooomrud
, но меня интересует только этот
  a = [{"test": 1}]

А так вам тогда нужно проверять на тип как выше уже советовали..



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

#10 Фев. 4, 2021 16:16:27

izooomrud
Зарегистрирован: 2021-01-16
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Корректная проверка ключа в словаре

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 для цикла что ли?

Отредактировано izooomrud (Фев. 4, 2021 16:16:58)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version