Уведомления

Группа в Telegram: @pythonsu

#1 Май 2, 2021 11:58:08

Dany
Зарегистрирован: 2021-05-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг словаря полученного из JSON

[{
'key': 'key3',
'value': '1',
'type': 'long'
}, {
'key': 'key2',
'value': '2',
'type': 'long'
}, {
'key': 'key3',
'value': 'true',
'type': 'boolean'
}
]

Есть примерно такой словарь, преобразованный из JSON - мне нужна быстрый способ находить значения value по key.

Мне известен только ключ, ключи везде разные и неповторяются.
key1 = data - и тд, не катит, даные динамические.

Я сейчас пробегаю по всем key через for запоминаю i с нужным мне key и делаю запрос
data - но подводный камень в том, что есть JSON с очень огромным набором значений таких. И там такой подход довольно долгий (.


Есть ли какой то простой и быстрый вариант ускорить работу этой балалайки?

Офлайн

#2 Май 2, 2021 16:30:20

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Парсинг словаря полученного из JSON

Обычно люди за один проход делают временный словарь чтобы потом многократно по ключу значение вытаскивать.

p.s.
Ваш json делал кто-то очень странный. Json позволяет напрямую хранить int,bool и т.п. Идеи хранить значение в строке и записывать отдельно тип, и хранить список вместо словаря, если ключи уникальны могут прийти в голову только тому у кого мозг сильно травмирован долгим использованием xml :)).



Офлайн

#3 Май 2, 2021 23:54:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Парсинг словаря полученного из JSON

Dany
Есть примерно такой словарь, преобразованный из JSON - мне нужна быстрый способ находить значения value по key.
Можешь построить индекс и искать в индексе. Индекс может быть в форме словаря, где ключи - это ключи, а значения - это списки с позициями в основном списке словарей.

Например
  
index = {
    'key1': [0, 3, 5],
    'key2': [4, 7]
}
  
>>> index = {
...     'key1': [0, 3, 5],
...     'key2': [4, 7]
... }
>>> 
>>> data = [
...     {'key': 'key1',
...      'value': 'val11',
...      'type': 'type11'},
...     {'key': 'keyX',
...      'value': 'val1',
...      'type': 'type1'},
...     {'key': 'keyX',
...      'value': 'val1',
...      'type': 'type1'},
...     {'key': 'key1',
...      'value': 'val12',
...      'type': 'type12'},
...     {'key': 'key2',
...      'value': 'val21',
...      'type': 'type21'},
...     {'key': 'key1',
...      'value': 'val13',
...      'type': 'type13'},
...     {'key': 'keyX',
...      'value': 'val1',
...      'type': 'type1'},
...     {'key': 'key2',
...      'value': 'val22',
...      'type': 'type22'},
...     {'key': 'keyX',
...      'value': 'val1',
...      'type': 'type1'},
... ]
>>> 
>>> out = []
>>> for k in index:
...     out.append([data[i] for i in index[k]])
... 
>>> out
[[{'key': 'key1', 'value': 'val11', 'type': 'type11'}, {'key': 'key1', 'value': 'val12', 'type': 'type12'}, {'key': 'key1', 'value': 'val13', 'type': 'type13'}], [{'key': 'key2', 'value': 'val21', 'type': 'type21'}, {'key': 'key2', 'value': 'val22', 'type': 'type22'}]]
>>>



Отредактировано py.user.next (Май 3, 2021 00:05:36)

Офлайн

#4 Май 3, 2021 00:58:27

Dany
Зарегистрирован: 2021-05-02
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг словаря полученного из JSON

doza_and
Обычно люди за один проход делают временный словарь чтобы потом многократно по ключу значение вытаскивать.p.s.Ваш json делал кто-то очень странный. Json позволяет напрямую хранить int,bool и т.п. Идеи хранить значение в строке и записывать отдельно тип, и хранить список вместо словаря, если ключи уникальны могут прийти в голову только тому у кого мозг сильно травмирован долгим использованием xml ).


Не могу не согласиться, просто по другому нереально было сделать. JSON - тут больше как лог, в таком виде это все идет в базу ну и вторично, как есть пишеться в логи.

Отредактировано Dany (Май 3, 2021 01:09:02)

Офлайн

#5 Май 3, 2021 09:04:32

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Парсинг словаря полученного из JSON

Dany
JSON - тут больше как лог
На лог это не похоже потому что такие данные должны писаться целиком. А логи обычно дописываются кусочками без возврата записи в более ранние позиции файла. json,xml не предусматривает потокового формата записи в отличии от yaml формата в котором это есть.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version