2 Вопрос: вывести значение словаря на основе другого значения?

вопрос создан в Mon, Mar 18, 2019 12:00 AM

Как напечатать строку «value» только для id: «resolution» ??

Здесь в этом случае я хочу напечатать значение «Fixed»

customFields: {
 string: [
 {
 id: "device_type",
 value: "iPhone 6"
 },
 {
 id: "os_version",
 value: "iOS 10.x"
 },
 {
 id: "rabbit_build",
 value: "2.11.llyu"
 },
 {
 id: "resolution",
 value: "Fixed"
 },

Мой код Python -

for ib in data['documents']:
sid = ib['id']
tit = ib['title']
stat = ib['status']
nstep = ib['next_step']['action']
requester = ib['requesterIdentity']
resolution = ib['customFields']['string']
print(sid, tit, stat, nstep, requester, resolution)

На выходе выводятся все идентификаторы и значения, а я хочу напечатать «значение» только для идентификатора: «разрешение»

    
- 3
  1. Неверный синтаксис dict для Python
    2019-03-18 11: 19: 14Z
  2. Пожалуйста, не меняйте весь свой вопрос так сильно, после того, как люди уже ответили, вы должны использовать комментарии, чтобы исправить себя. Это делает ваш пост едва ли понятным для будущих ссылок /поисков.
    2019-03-18 11: 32: 33Z
  3. Да, вы сделали и попросили людей проверить ваш обновленный код Python, который не является реальным кодом Python, и вы забыли определить data.
    2019-03-18 11: 42: 27Z
2 ответа                              2                         

Ваш нынешний код не делает то, что вы хотите, потому что вы сохраняете в новой переменной с именем «resolution» весь список в ib ['customField'] ['string'] и печатаете значение этой новой переменной. (что такое «ib»?)

Между именем этой новой переменной и поведением оператора '=' нет никакой связи.

Вы пытаетесь захватить определенный элемент списка, проверьте, содержит ли 'id' разрешение ', а затем распечатайте его.

вы можете использовать

resolutionList = [it for it in ib['customFields']['string'] if it['id'] == 'resolution']
for element in resolutionList :
  print(element['value'])

или (в одну строку)

print(*[it['value'] for it in ib['customFields']['string'] if it['id'] == 'resolution'])

Оператор * используется для удаления списка (print (* [a, b]) < = > print (a, b))

    
0
2019-03-18 11: 26: 33Z
  1. когда распечатывается разрешение, оно должно отображаться с другими значениями цикла
    2019-03-18 11: 28: 20Z
  2. нет необходимости редактировать мой ответ, просто замените ib ['customFields'] ['string'] в моем синтаксисе на имя переменной, т.е. разрешение
    2019-03-18 11: 28: 37Z
  3. "когда распечатывается разрешение, оно должно отображаться с другими значениями цикла" это ничего не значит
    2019-03-18 11: 29: 38Z

Это довольно просто, но должно работать:

for ib in data['documents']:
    sid = ib['id']
    tit = ib['title']
    stat = ib['status']
    nstep = ib['next_step']['action']
    requester = ib['requesterIdentity']
    for item in ib['customFields']['string']:
        if item['id'] == "resolution":
           resolution = item['string']

Конечно, поскольку "строка" - это список словарей, вы не можете получить конкретные значения, не просматривая все словари этого списка. Я также рекомендую вам преобразовать этот список в словарь, чтобы ваша структура json выглядела следующим образом:

string: {
 "device_type": iPhone 6".
 "os_version": "iOS 10.x",
 "rabbit_build": "2.11.llyu",
 "resolution": "Fixed",
 }

С такой структурой вы можете проверять все значения без циклов, напрямую получая значение клавиши «resolution»

    
0
2019-03-18 13: 08: 09Z
  1. Как внести изменения, когда они уже находятся в цикле? for ib in data['documents']: sid = ib['id'] tit = ib['title'] stat = ib['status'] nstep = ib['next_step']['action'] requester = ib['requesterIdentity'] resolution = ib['customFields']['string'] print(sid, tit, stat, nstep, requester, resolution)
    2019-03-18 11: 17: 45Z
  2. Проверьте мое последнее обновление в разделе вопросов, который уже выполняется в цикле. Можно ли добавить еще один цикл внутри цикла и печатать вместе с ним?
    2019-03-18 11: 29: 48Z
  3. отредактировал мой ответ, да, вы просто добавили еще один циклчерез список "string"
    2019-03-18 12: 59: 16Z
  4. Можете ли вы дать мне знать, как это кодировать?
    2019-03-18 13: 02: 17Z
  5. сделал все возможное, чтобы объяснить, что происходит
    2019-03-18 13: 08: 28Z
источник размещен Вот