«индексы списка должны быть целыми числами» - Python - PullRequest
0 голосов
/ 16 января 2020

У меня есть ввод, как показано ниже:

"custom_fields": "[{"id":360027795053,"value":"XXXX"}, 
                   {"id":360030272393,"value":"XXX"}, 
                   {"id":360027795613,"value":XXX}, 
                   {"id":360027795393,"value":"XXX"}, 
                   {"id":360027795413,"value":"XXX"}, 
                   {"id":360030272233,"value":"XXX"},
                   {"id":360027795453,"value":["XXX"]}]"

Я получаю доступ к вышеуказанному следующим образом:

dict_conversion=json.loads(custom_fields)

properties['field_1']=dict_conversion['360027795053']['value']

Вышеприведенное дает следующую ошибку:

индексы списка должны быть целыми числами

Похоже, я пытаюсь вызвать элементы по их имени, но это не позволяет вызвать. Я могу звонить только по номеру индекса следующим образом:

 properties['field_1']=dict_conversion[1]['value']

Но я предпочитаю звонить по номеру ключа.

Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 16 января 2020

Вы можете сделать это, сначала преобразовав в dict с идентификатором, являющимся ключом, и значением, являющимся его значением.

custom_fields = [{"id":360027795053,"value":"XXXX"},
                   {"id":360030272393,"value":"XXX"},
                   {"id":360027795613,"value":"XXX"},
                   {"id":360027795393,"value":"XXX"},
                   {"id":360027795413,"value":"XXX"},
                   {"id":360030272233,"value":"XXX"},
                   {"id":360027795453,"value":"XXX"}]
id_dict = {i['id']: i['value'] for i in custom_fields}
print(id_dict)
>>> {360027795053: 'XXXX', 360030272393: 'XXX', 360027795613: 'XXX', 360027795393: 'XXX', 360027795413: 'XXX', 360030272233: 'XXX', 360027795453: 'XXX'}

Теперь, если вы хотите получить значение для данного идентификатора, вы можете вызвать используя:

print(id_dict[360027795053])
>>> XXXX

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

search_id = 360027795053
for i in custom_fields:
    if i['id'] == search_id:
        print(i['value'])
        break
0 голосов
/ 16 января 2020

Хорошо, прежде всего: '360027795053' - это строка, вы должны удалить кавычку, чтобы получить целое число.

Во-вторых, dict_conversion - это список, где dict_conversion[0]['id'] == 360027795053 - это истина. Клавиши '360027795053' или даже 360027795053 нет.

Если вы хотите получить доступ к значению с идентификатором 360027795053, самый простой способ, безусловно, отформатировать ваш json как один диктовку:

"{360027795053:"XXXX", 
  360030272393:"XXX", 
  360027795613:"XXX", 
  360027795393:"XXX", 
  360027795413:"XXX", 
  360030272233:"XXX",
  360027795453:["XXX"]}"
...