2016-12-05 3 views
-1

Я читаю данные и API, ответ которого - JSON.Чтение значений из динамически созданных ключей словаря. - Python 2.7

А затем преобразуется в Python словарь

Часть этого словаря в вопросе, список словарей фактически.

[ 
    { 
     "inputType" : "text", 
     "can_be_anything_here" : { 
     "label" : "Enter name", 
     "value" : "login", 
     "required" : "True" 
     } 
    }, 
    { 
     "inputType" : "password", 
     "can_be_anything_here" : { 
     "label" : "password", 
     "value" : "password", 
     "required" : "True" 
     } 
    } 
] 

Затем мне нужно сгенерировать HTML для этой формы.

Я могу легко прочитать значение на "inputType", потому что его ключ знает каждый раз.

Но мне нужно прочитать

{ 
    "label" : "password", 
    "value" : "password", 
    "required" : "True" 
} 

Но его ключ неизвестен/динамический каждый раз "can_be_anything_here"

Как читать данные из него?

+1

За исключением повторения словаря? –

+0

Что ж, что ??? 1 вещь, конечно, что каждый словарь будет иметь 2 ключа ... первый '' inputType ", а второй будет' 'can_be_anything_here" ' – Umair

+0

' для k, v в d.items(): if k! = 'InputType' : ... ' – AChampion

ответ

0

Если я понял из вашего вопроса правильно. Таким образом, ключ can_be_aything_here является переменной, и вы хотите каждый раз получать доступ к ней ключом значения. Если это то, что вы имели в виду, так вот, что приходит первым на ум:

a = [{"inputType": "text", "can_be_anything_here": {"label": "Enter name", "value": "login", "required" : "True"}}, {"inputType": "Password", "can_be_anything_here2": {"label": "password", "value": "password", "required" : "True"}}] 

for i in a: 
    for k, v in i.items(): 
     # You can remove this codition if you need this key's value 
     if k != "inputType": 
      # Here you can retrive the unkown key 
      print("Current Key is: ", k) 
      # Here you can have the unknown key value which is a dict 
      print(v, type(v)) 
      # For example: retrive the dict's value of the unknown key 
      print "v['label']: ", v["label"] 

Выход:

Current Key is: can_be_anything_here 
{'required': 'True', 'value': 'login', 'label': 'Enter name'} <type 'dict'> 
v['label']: Enter name 
Current Key is: can_be_anything_here2 
{'required': 'True', 'value': 'password', 'label': 'password'} <type 'dict'> 
v['label']: password 
-1

, если каждый из словаря в списке есть только две клавиши, попробуйте

для ключа in lst [index]:

if key != "inputType": 

    content = lst[index][key] 

Я думаю, вы сможете прочитать то, что хотите.

+0

. Я не знаю ключевое имя второго элемента dic, поэтому ваш код не будет работать. – Umair

+0

. Повторно прочтите код, так как вы знаете первый ключ как «inputType», что угодно! = «inputType» должен быть вашим вторым ключом как вы взаимодействуете через все ключи внутри этого словаря. –

-1

Если каждый словарь в списке есть только две кнопки, то вам просто нужно проверить, если ключ inputType или something_else:

for i in yourList: 
    for key in i: 
     if key != 'inputType': 
      print(i[key]['label']) 

Каус, если каждый словарь имеет более двух клавиш, вы можете поместить имя все ключи в список, как это:

nameList = ['inputType', 'time', ... ] 

Просто убедитесь, что nameList исключает can_be_something_else. Тогда то, что вам нужно сделать, это проверить, является ли ключ в нем или нет:

for i in yourList: 
    for key in i: 
     if key not in nameList: 
      print(i[key]['label']) 

Вы можете также проверить, имеет ли значение ключа label value required ключи, чтобы убедиться, что вы ловите правую часть:

for i in yourList: 
    for key in i: 
     if 'label' in i[key] and 'value' in i[key] and 'required' in i[key]: 
      print(i[key]['label']) 
Смежные вопросы