Задать вопрос
@Alex_888

Как прочитать dict?

raw.update присылает
{1448413438: pyrogram.raw.types.ChannelForbidden(id=1448413438, access_hash=8335995624985435932, title='N', broadcast=True, megagroup=False)}

как мне получить id?
  • Вопрос задан
  • 124 просмотра
Подписаться 1 Простой 2 комментария
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
У вас словарь из ключа и значения. В качестве значения у вас экземпляр класса pyrogram.raw.types.ChannelForbidden с определенными в круглых скобках параметрами. Среди этих параметров у вас есть id.
Но получить этот параметр в лоб нельзя. Он для этого не предназначен.

Вот если бы raw.update возвращал бы строку, её можно было бы распарсить. Но по вашему примеру он возвращает словарь с экземпляром класса в качестве значения…

В принципе, если бы мы точно знали бы, что ключ словаря всегда равен id, можно было бы как-то так:
data = {1448413438: dict(id=1448413438, access_hash=8335995624985435932, title='N', broadcast=True, megagroup=False)}
keys = [*data.keys()]
print(data[keys[0]])

Но мы не знаем точно, всегда ли id равно ключу…
Ответ написан
Комментировать
@trankov
Смотрите. Вы получаете словарь ключ: значение. Вы никогда не знаете, какой именно будет ключ. Но вы знаете, что в словаре всегда одна строка, и что значение тоже содержит словарь, в котором ключи уже известны:

response = {
    1448413438: pyrogram.raw.types.ChannelForbidden(
        id=1448413438,
        access_hash=8335995624985435932,
        title='N',
        broadcast=True,
        megagroup=False
    )
}

Значит, вам просто надо обратиться к первому по счёту значению. Для этого у dict есть два метода: keys() и values(). Они выдадут вам ключи и значения по отдельности. Внимание, результат будет not subscriptable, то есть, чтобы к обращаться к значениям, вам нужно преобразовать результат в list или tuple. Кстати, если вы преобразуете в них сам словарь, они отдадут вам именно список/кортеж самих ключей, то есть писать response.keys() необязательно, можно написать просто response.

Вариантов, таким образом, может быть несколько. Например, можно обратиться к значению напрямую:

tuple(response.values())[0]['id']

Либо пойти через ключ (для краткости не буду объявлять переменную, но суть понятна, надеюсь):

response[tuple(response)[0]]['id']

Конечно, если в возвращаемом словаре на первом уровне пар ключ/значение будет больше одной, задача слегка усложнится. Здесь вам как раз поможет извлечение пришедших ключей.

reps_keys = tuple(response)
Хотя что с ними делать, если они совершенно произвольны, я не могу представить. Но вдруг зачем-то нужно (например, сохранять на будущее, чтобы потом извлекать конкретный ответ).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽