Найти - Пользователи
Полная версия: Парсинг словаря полученного из JSON
Начало » Центр помощи » Парсинг словаря полученного из JSON
1
Dany
[{
'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 с очень огромным набором значений таких. И там такой подход довольно долгий (.


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

p.s.
Ваш json делал кто-то очень странный. Json позволяет напрямую хранить int,bool и т.п. Идеи хранить значение в строке и записывать отдельно тип, и хранить список вместо словаря, если ключи уникальны могут прийти в голову только тому у кого мозг сильно травмирован долгим использованием xml :)).
py.user.next
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'}]]
>>>
Dany
doza_and
Обычно люди за один проход делают временный словарь чтобы потом многократно по ключу значение вытаскивать.p.s.Ваш json делал кто-то очень странный. Json позволяет напрямую хранить int,bool и т.п. Идеи хранить значение в строке и записывать отдельно тип, и хранить список вместо словаря, если ключи уникальны могут прийти в голову только тому у кого мозг сильно травмирован долгим использованием xml ).


Не могу не согласиться, просто по другому нереально было сделать. JSON - тут больше как лог, в таком виде это все идет в базу ну и вторично, как есть пишеться в логи.
doza_and
Dany
JSON - тут больше как лог
На лог это не похоже потому что такие данные должны писаться целиком. А логи обычно дописываются кусочками без возврата записи в более ранние позиции файла. json,xml не предусматривает потокового формата записи в отличии от yaml формата в котором это есть.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB