Как мне перебрать словарь через другой цикл? - PullRequest
0 голосов
/ 24 октября 2019

В настоящее время я делаю цикл, который проходит по каждой записи (subreddit и id канала discord) в файле json.

for subreddit_name, channel_id in available_streams.items():
            get_channel = guild.get_channel(channel_id)
            print(f"{subreddit_name}: #{get_channel}")
            subreddit = reddit.subreddit(subreddit_name)
            for submission in subreddit.stream.submissions():
                try:

                except Exception as e:

Первый цикл работает нормально (показывает все ключи и значения в словаре). Тем не менее, когда subreddit_name переходит к следующему циклу for, используется только первый элемент, что означает, что только сообщения из одного субредита передаются в потоковом режиме. Что-то не так в моем коде, который заставляет его рассматривать только первую запись?

Ответы [ 2 ]

0 голосов
/ 31 октября 2019

Если вы используете PRAW, вам не следует помещать поток в цикл.

subreddit.stream.submissions () будет продолжать потоковую передачу бесконечно, и цикл for никогда не будет перенесен на следующий элемент.

Вы должны попробовать другой метод, такой как потоковая передача асинхронно или только получение последних x сообщений из subreddit. Или вы можете даже использовать разрыв во 2-м цикле, когда ваши условия выполнены.

for subreddit_name, channel_id in available_streams.items():
    get_channel = guild.get_channel(channel_id)
    print(f"{subreddit_name}: #{get_channel}")
    subreddit = reddit.subreddit(subreddit_name)
    for submission in subreddit.new(limit=10):
        try:
            print(submission.title)
        except Exception as e:
            print(f"Couldn't retrieve submission title '{submission}': {e}")
0 голосов
/ 24 октября 2019

Вы можете просто пройтись по клавишам и затем присвоить значение внутри цикла

outerDict = dict() # Assume there's more dicts in there like you want
for a in outerDict:
   element_value_inside_outerDict = outerDict.get(a)
   # Some code for whatever you want to do with it
   for b in element_value_inside_outerDict:
       value_inside_innerDict = element_value_inside_outerDict.get(b)

Может быть, это все исправит

...