Python: Как установить значение из JSON в качестве индекса в списке? - PullRequest
0 голосов
/ 30 октября 2018

Я пытаюсь прочитать набор данных и установить целочисленное значение файла JSON в качестве массива списка. Это пример файла JSON,

[{
"index_id": "1234",
"text": "hello world",
},
{
"index_id": "5678",
"text": "roses are red",
}]

Прямо сейчас я только что попытался прочитать файл JSON и поместить все в defaultdict (список), это все испортило. Предположим, я прочитал все до L1

Если я попытаюсь получить L1 [1234] , это приведет к ошибке, поскольку 1234 не является допустимым индексом в L1, а индексы равны 0,1.

Если был напечатан L1,

{u'1234': u'hello world'}, {u'5678': u'roses are red'}]

Я понимаю, что в списке есть мое потенциальное значение для индекса в качестве значения, хранящегося в Юникоде (что еще хуже).

Так, как превратить L1 в метод или метод, чтобы, если я попытаюсь поднять L1 [1234] , это подняло бы 'hello world'

{1234: u'hello world'}, {5678: u'roses are red'}]

Спасибо

Отредактировано: изменен JSON.

Ответы [ 5 ]

0 голосов
/ 30 октября 2018

В случае, если вы читаете из файла json, при загрузке json типом данных является словарь, и вы можете непосредственно прочитать ключи загруженных данных. Тем не менее, если вы хотите создать список из него, пожалуйста, обратитесь ниже код

Мой файл sample.json

{ "1234": { "id": "blabla", "iscategorical": "0" }, "5678": { "id": "valore" }, «8975»: «значение», "6985": { "id": "valore" } }

Код в отдельном файле Python:

импорт JSON

import io

из коллекции импорта defaultdict

с io.open ('sample.json') в качестве файла данных:

data_loaded = json.load(data_file)

печать (data_loaded)

печать (тип (data_loaded))

l1 = defaultdict (список)

для ввода data_loaded:

l1[key] = data_loaded[key]

печать (l1)

печать (l1 [ '1234'])

0 голосов
/ 30 октября 2018

Измени свой JSON, как это

L1 = {
    "1234": "hello world",
    "5678": "roses are red"
}

# call it with quote or as string

print L1["1234"]

или создать функцию

jsonList = [{
    "1234": "hello world"
}, 
{
    "5678": "roses are red"
}]


def L1(key):
  key = str(key)
  for i in jsonList:
    if key in i:
      return i[key]

print L1(5678)
0 голосов
/ 30 октября 2018

Или попробуйте объединить список словарей:

>>> [i['1234'] for i in L1 if '1234' in i][0]
'hello world'
>>> 

Всего:

>>> L1=[{
    "1234": "hello world"
}, 
{
    "5678": "roses are red"
}]
>>> [i['1234'] for i in L1 if '1234' in i][0]
'hello world'
>>> 
0 голосов
/ 30 октября 2018

Я думаю, вы можете прочитать это как словарь Python, где 1234 и 5678 являются «ключами», а соответствующие строки являются значениями. Например,

{
  1234: 'hello world', 
  5678: 'roses are red'
}

Вы можете внести в нее индекс, как вы упомянули, L1[1234], и вы получите "привет мир". Вы можете прочитать немного о словарях здесь .

0 голосов
/ 30 октября 2018

Если у вас есть список диктов, вы можете сделать что-то вроде этого:

json_lst = [{
    "1234": "hello world"
}, 
{
    "5678": "roses are red"
}]

result = {int(k) : v  for element in json_lst for k, v in element.items()}
print(result[1234])

выход

hello world

Приведенное выше понимание словаря эквивалентно следующим вложенным циклам:

result = {}
for element in json_lst:
    for k, v in element.items():
          result[int(k)] = v 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...