сравнить элементы из списка в файле json - PullRequest
0 голосов
/ 06 января 2020

У меня есть сценарий, в котором я пытаюсь сравнить элементы списка с файлом json и, если есть совпадение, вернуть определенные значения и создать ответ json. вот мои json данные

[
 {
    "evi": 1223,
    "evn": "testapp1",
    "conf": {
        "c_gr": "tot",
        "c_id": "112"
    }
 },
 {
    "evi": 6759,
    "evn": "testapp2",
    "conf": {
        "c_gr": "tot",
        "c_id": "112"
    }
 },
  {
    "evi": 3352,
    "evn": "testapp3",
    "conf": {
        "c_gr": "tot7",
        "c_id": "112"
    }
 }
]

Вот что я пробовал до сих пор:

response=requests.post('https://testaapp.com', headers=headers, data=data)
resp_json=response.json()
if response.status_code == 200:
    print ('working fine...!!')
else:
    print ('notworking !!')
metadata=resp_json['data']
m_list=[1123, 123445, 61887, 3352, 35811488976]
final_lst_data1 = []
final_lst_data2 = []
for key in m_list:
    temp1= key
    for keya in metadata:
        if temp1 in metadata[keya]['evi']:
           final_lst_data1.append(metadata['evn']) #return the names
           final_lst_data2.append(metadata['evn'], metadata['conf']) #return evn and conf values after checking and then dump it to json from list in same json format if not possible then convert to json from list, not sure how to do this here.

Но это не работает, так как выдает ошибку ниже

    if key in metadata[keya]['evi']:
TypeError: list indices must be integers or slices, not dict

1 Ответ

1 голос
/ 06 января 2020

Вы используете словарь в качестве индекса. Когда вы говорите «для keya в метаданных:», keya - это словарь, который ссылается на список словарей внутри «метаданных». Таким образом, вам не нужно использовать метаданные [keya] для доступа к каждому элементу, вы можете просто использовать 'keya'.

for keya in metadata:
    if temp1 == keya['evi']:
       final_lst_data1.append(keya['evn'])
       final_lst_data2.append([keya['evn'], keya['conf']])
...