Обратите внимание, что этот ответ основан на моем предположении. Я не смог бы подтвердить, не увидев фактических данных.
Исходя из того, что я вижу, в списке 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"
]
}