Поиск ключа Json с переменной в Python

json1

[{'one.10': 'eno', 'three': 1, 'two': False},
{'one.21': 'eon', 'three': 2, 'two': True},
{'one.31': 'noe', 'three': 3, 'two': False}]
#{'one.x': 'oen', 'three': y, 'two': True}

С указанным выше файлом json1 в этом формате и с сильно вложенным json2:

json2['Item']["21"]

Немного запутано, но можно ли "21" заменить переменной? и если да, могли бы вы установить для переменной значение x равное one.x в json1, выполнив поиск значения y «три»: y », т.е. ищите 3 и получите x равное 31?

json2['Item'][x] # for known y

Редактировать. json1 на самом деле немного переключается:

[{"TextKey": "ItemName.x", "Name": "y", ...}
...]

json2 похож на:

{
    "Item": {
        "10": {
            "djdj": True,
            ...
            "hduf": "dpdk"
        }

        "11": {
            "djdj": True,
            "info": {
            ...
            }
            ...
            "hduf": "dppk"
         }
         ...
    }
}

Это могло бы помочь людям, если бы вы подробнее остановились на вопросе. Что вы на самом деле пытаетесь сделать? Вам в значительной степени нужно объяснять все, что вы записали, потому что никто не может понять ваш вопрос.

GantTheWanderer 22.05.2018 01:05

Похоже, что это больше, чем просто "немного" запутано: p, но, да, все это можно сделать. Я думаю. Вы хотите что-то вроде json2['Item2'][extract_x_from_one_key (json1[index_of_three_value])? "Обязательно" ли хранить данные таким образом?

user5051310 22.05.2018 01:06

Я понимаю ваш вопрос (отчасти сложный), вы хотите получить значения из файла json1. значение "x" - это "one.x" в первом столбце, значение y - это значение перед ключевым словом "three" ??? Вы хотите найти строку на основе ключевого слова "y", а затем использовать "x" из этой строки для использования в >> json2 ["item"] [x] ??? я прав???

fazkan 22.05.2018 01:41

@fazkan: Что значит сказать значение перед ключевым словом "три" для данных в словаре (который неупорядочен)?

martineau 22.05.2018 02:21

Не ожидал такого быстрого ответа. в любом случае json1 и json2 - это внешние файлы, в которых я могу их читать и назначать переменной в порядке. @fazkan y будет "'' three ': y" или, скорее, "three": "y" ". Число x является идентификатором гнезда в json2. Данные не обязательно должны храниться таким образом, но в идеале я бы оставил как есть. Я полагаю, что присвоенная переменная может быть изменена в случае необходимости.

Turtle 22.05.2018 03:06

Но да, @Terminus что-то вроде этой команды, в настоящее время я даже не могу заставить переменную работать вместо "21"

Turtle 22.05.2018 03:19

У вас есть образец json2, который вы можете разместить здесь?

user5051310 22.05.2018 03:37

json2 сильно вложен, но это "правильный" json, если есть такая вещь, поэтому ['Item'] ["21"] выводит из него правильное гнездо, json1 я не могу сделать то же самое, что и гнезда aren не идентифицируется извне (это диктат или какой-то массив, верно?)

Turtle 22.05.2018 03:52
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
8
110
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вот один из способов поиска по свойству элементов в json1, чтобы получить ключи для элементов в json2.

Сценарий

json1 = [
    {"TextKey": "ItemName.09", "ID" : 0},
    {"TextKey": "ItemName.18", "ID" : 1},
    {"TextKey": "ItemName.27", "ID" : 2},
    {"TextKey": "ItemName.36", "ID" : 3},
    {"TextKey": "ItemName.45", "ID" : 4},
    {"TextKey": "ItemName.54", "ID" : 5}
]

json2 = {
    "Item": {
        "09": { "data": "a" },
        "18": { "data": "b" },
        "27": { "data": "c" },
        "36": { "data": "d" },
        "45": { "data": "e" },
        "54": { "data": "f" }
    }
}

json1SearchValues = [4,2,9]

for searchVal in json1SearchValues:
    # Use list comprehension to search json1 on property ID by searchVal 
    json1Item = [j1 for j1 in json1 if j1["ID"] == searchVal]
    # Assuming ID is unique, expecting one match
    if len(json1Item) == 1:
        json2ItemKey = json1Item[0]["TextKey"].split(".")[1]
        print "Found (json1 ID = " + str(searchVal) + ") -> (json2 Key = " + json2ItemKey + ") -> " + str(json2["Item"][json2ItemKey])
    # If there is no or more than one json1 item with that ID, do something else
    else:
        print "Invalid Key (" + str(searchVal) + ")"

Выход

Found (json1 ID = 4) -> (json2 Key = 45) -> {'data': 'e'}
Found (json1 ID = 2) -> (json2 Key = 27) -> {'data': 'c'}
Invalid Key (9)

Я получаю недопустимый синтаксис в строках печати, которые нужно () это. то есть: print ("Invalid Key (" + str (searchVal) + ")"), просто нужно проверить, что я получаю то, что мне нужно, с импортированными jsons

Turtle 22.05.2018 23:54

Пришлось немного поиграть с числами, так как это не строго уникально, но дело сделано. Я очень признателен, я пробовал j1 для j1 ... ранее, но сам ни к чему не приводил. Затем мне нужно перевернуть и получить ключ от json2 для json1, но теперь это должно быть достаточно тривиально

Turtle 23.05.2018 13:43

Другие вопросы по теме