Как получить конкретное значение из определенного ключа в Python

#python #json

Вопрос:

 jsonA = 
[ {'id': 'xxx1', 'serial': 'BPCE-RNHC-25G8', 'model': 'AlertTrace', 'subject': 'EMP004'}, 
{'id': 'xxx2', 'serial': 'XX-WWW-2XSFC', 'model': 'AlertTrace', 'subject': 'EMP005'}, 
{'id': 'xxx3', 'serial': 'VVV-ASD-CDSG', 'model': 'AlertTrace', 'subject': ''} ]
 

У меня есть 3 json-данных, и я хочу получить данные, которые subject не являются нулевыми. Далее, я должен иметь возможность фильтровать результат, который имеет только два ключа, которые являются serial и subject .

Ожидаемый результат:

 jsonA = 
[ {'serial': 'BPCE-RNHC-25G8', 'subject': 'EMP004'}, 
{'serial': 'XX-WWW-2XSFC', 'subject': 'EMP005'} ]

 

Я пробовал с этим кодом: (но вывод показывает мне только тему. Мне нужны оба значения из serial и subject)

Filter = [{'serial': dct['serial']} and {'subject': dct['subject']} for dct in jsonA if (dct['subject']) != None]

Ответ №1:

Вы можете попробовать использовать следующий пример кода:

 a_dict = {'color': 'blue', 'fruit': 'apple', 'pet': 'dog'}
       for key, value in a_dict.items():
            print(key, '->', value)
 

В вашем коде вы можете попробовать что-то вроде:

 for key, value in jsonA.items():    
   if value != None:
 

возвращаемый ключ

Но я не совсем уверен 🙂

Ответ №2:

Просто делай:

 res = [{'serial': dct['serial'], 'subject': dct['subject']} for dct in jsonA if dct['subject']]
print(res)
 

Вывод

 [{'serial': 'BPCE-RNHC-25G8', 'subject': 'EMP004'}, {'serial': 'XX-WWW-2XSFC', 'subject': 'EMP005'}]
 

В Python значение истинности None и "" равно False , поэтому вы можете использовать dct['subject'] его непосредственно в условных выражениях. Для создания словарей обратитесь к документации.

Комментарии:

1. О, это значит, что мне нужно использовать , вместо and ?

2. @WEIZHUANGGOH В данном конкретном случае построения словаря да, есть другие способы, но это лучший

3. Хорошо, спасибо, что поправили меня, я отмечу это как ответ через 11 минут.