#python #json #dictionary #indexing #dictionary-comprehension
#python #json #словарь #индексирование #словарь-понимание
Вопрос:
Предположим, у меня есть следующий файл json. С data1["tenants"][1]['name']
помощью я могу выбрать uniquename2. Есть ли способ собрать число ‘1’ путем перебора документа?
{
"tenants": [{
"key": "identifier",
"name": "uniquename",
"image": "url",
"match": [
"identifier"
],
"tags": [
"tag1",
"tag2"
]
},
{
"key": "identifier",
"name": "uniquename2",
"image": "url",
"match": [
"identifier1",
"identifier2"
],
"tags": ["tag"]
}
]
}
короче говоря: data1["tenants"][1]['name']
= uniquename2 data1["tenants"][0]['name']
= uniquename
Как я могу узнать, какой номер имеет какое имя. Итак, если у меня есть uniquename2, какой номер / индекс соответствует ему?
Ответ №1:
вы можете перебирать арендаторов, чтобы сопоставить индекс с именем
data = {
"tenants": [{
"key": "identifier",
"name": "uniquename",
"image": "url",
"match": [
"identifier"
],
"tags": [
"tag1",
"tag2"
]
},
{
"key": "identifier",
"name": "uniquename2",
"image": "url",
"match": [
"identifier1",
"identifier2"
],
"tags": ["tag"]
}
]
}
for index, tenant in enumerate(data['tenants']):
print(index, tenant['name'])
ВЫВОД
0 uniquename
1 uniquename2
Ответ №2:
Предполагая, что вы уже превратили свой json в словарь, вот как вы можете получить индекс первого появления имени в вашем списке (это зависит от того, что имена действительно уникальны):
data = {
"tenants": [{
"key": "identifier",
"name": "uniquename",
"image": "url",
"match": [
"identifier"
],
"tags": [
"tag1",
"tag2"
]
},
{
"key": "identifier",
"name": "uniquename2",
"image": "url",
"match": [
"identifier1",
"identifier2"
],
"tags": ["tag"]
}
]
}
def index_of(tenants, tenant_name):
try:
return tenants.index(
next(
tenant for tenant in tenants
if tenant["name"] == tenant_name
)
)
except StopIteration:
raise ValueError(
f"tenants list does not have tenant by name {tenant_name}."
)
index_of(data["tenants"], "uniquename") # 0