Мой дискорд-бот не перебирает весь массив, который ему нужен - PullRequest
0 голосов
/ 19 июня 2020

В настоящее время у меня есть сценарий, который просматривает список JSON результатов и извлекает определенную информацию для каждого результата. В настоящее время я пытаюсь извлечь теги для каждого результата, который находится внутри списка animalURLS.

l oop может успешно пройти go по списку, если я не добавлю if statement. Однако результат изменится, если я добавлю if statement, он пройдет только через часть всего списка результатов, которые у меня есть. Максимальное количество печатаемых элементов - 85 с if statement. Были бы определенные результаты, которые были бы пропущены, даже если бы у него был соответствующий тег.

Вот список возможных тегов:

  • cat
  • dog
  • птица
  • другое

Я не уверен, почему мой код не работает для определенных результатов, и был бы признателен за любую помощь.

            for i, v in enumerate(miskaJSON[str(ctx.guild.id)]["animalURLS"]):
                if v[2] == tag:
                    print(v)
                    print(i)

Это пример miskaJSONStructure, на котором основан мой код. Тег является последним элементом в списке animalURLS:

    "628704494615789599": {
        "prefix": "%",
        "animalURLS": [
            [
                "Darth Kylo-Kun",
                "https://cdn.discordapp.com/attachments/628704495047671818/723325532397109329/IMG_20170531_140251.png",
                "cat"
            ]
        ],
        "tags": [
            "cat",
            "dog",
            "bird",
            "other"
        ]
    }

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Обратите внимание, что этот ответ основан на моем предположении. Я не смог бы подтвердить, не увидев фактических данных.

Исходя из того, что я вижу, в списке animalURLS есть три элемента:

  • Комментарий автор сообщения
  • URL изображения
  • Тег

Причина, по которой ваш ответ работает, заключается в том, что в animalURLS может быть несколько дополнительных элементов, которые содержат некоторую другую информацию . Это означает, что в списке будет более трех элементов, и v[2] не всегда может быть тегом.

for i, v in enumerate(miskaJSON[str(ctx.guild.id)]["animalURLS"]):
    # v[-1] would get the last item on the list which you are assuming would be a tag.
    if v[-1] == tag:
        validIndices.append(i)

Чтобы узнать, что такое v[2], если это не тег, вы можете попробовать следующее:

valid_tags = []
invalid_tags = []

for i, v in enumerate(miskaJSON[str(ctx.guild.id)]["animalURLS"]):
    if v[2] == tag:
        valid_tags.append(v[2])
    else:
        invalid_tags.append(v[2])

print(f"Total Valid Tags: {len(valid_tags)} | Valid Tags: {valid_tags}")
print(f"Total Invalid Tags: {len(invalid_tags)} | Invalid Tags: {invalid_tags}")

Я бы сделал это так, предполагая, что последний элемент в animalURLS всегда является тегом, вы можете использовать следующее, чтобы проверить, соответствует ли тег вашему списку тегов, если это ваш цель.

for i, v in enumerate(miskaJSON[str(ctx.guild.id)]["animalURLS"]):
    if v[-1] in miskaJSON[str(ctx.guild.id)]["tags"]:
        print(v)
        print(i)

Ожидаемый ввод JSON:

    "628704494615789599": {
        "prefix": "%",
        "animalURLS": [
            [
                "Darth Kylo-Kun", # Comment
                "https://cdn.discordapp.com/attachments/628704495047671818/723325532397109329/IMG_20170531_140251.png", # URL
                "cat" # Tag
            ]
        ],
        "tags": [
            "cat",
            "dog",
            "bird",
            "other"
        ]
    }

Возможный неожиданный ввод JSON:

    "628704494615789599": {
        "prefix": "%",
        "animalURLS": [
            [
                "Darth Kylo-Kun", # Comment
                "random stuff in between",
                "https://cdn.discordapp.com/attachments/628704495047671818/723325532397109329/IMG_20170531_140251.png", # URL
                "random stuff in between",
                "cat" # Tag
            ]
        ],
        "tags": [
            "cat",
            "dog",
            "bird",
            "other"
        ]
    }
0 голосов
/ 19 июня 2020
for i, v in enumerate(miskaJSON[str(ctx.guild.id)]["animalURLS"]):
    if v[-1] == tag:
        validIndices.append(i)

Каким-то образом это исправлено, и я понятия не имею, почему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...