2016-01-07 4 views
0

Один из моих словарей содержит несколько значений для одного ключа. Я работал над простым словарем с одним значением. Я новичок в python, не в состоянии понять, как справиться с этим. Мне нужно обновить таблицу базы данных, где «поле» будет столбцом, а значения будут из «строк», как в приведенном ниже примере.Итерация по нескольким значениям для одной клавиши в словаре

«поле» будет столбцом, а ключ «rows» будет значением в таблице базы данных для соответствующих столбцов.

dictn = { 
    u'field': [u'time', 
       u'met1', 
       u'met2', 
       u'met3', 
       u'met4', 
       u'met5', 
       u'met6', 
       u'met7'], 
    u'set': 0, 
    u'messages': [{u'text': u'string', 
        u'type': u'INFO'}], 
    u'rows': [[u'2016-01-00:00', 
       None, 
       u'0.24', 
       None, 
       u'0.24', 
       None, 
       u'0.16', 
       u'60'], 
       [u'2016-01-00:01:00:00', 
       None, 
       u'0.00', 
       None, 
       u'0.00', 
       None, 
       u'0.003500', 
       u'60'], 
       [u'2016-01-00:02:00.00', 
       None, 
       u'0.64', 
       None, 
       u'0.64', 
       None, 
       u'0.26', 
       u'60']] 
} 

ответ

0

один ключ в словаре может относиться только к одному значению

В примере вы дали ключ u'field' содержит одно значение, которое представляет собой список элементов, т.е.

[u'time',u'met1',u'met2',u'met3',u'met4',u'met5',u'met6',u'met7'] 

, следовательно, для того, для доступа к списку, хранящийся на значении ключа u'field вы должны использовать

list_of_elements = dictn[u'field'] 

там после того, как вы можете перемещаться по всему элементу s в списке, используя для цикла

for element in list_of_elements: 
    # do something 

Надежда эта ссылка может помочь вам

append multiple values for one key in Python dictionary

0

Вы можете перебрать список списков значений, т.е. dictn['rows'] и использовать каждый список значений вместе со списком имен столбцов, т.е. dictn['field'], чтобы сохранить все записи в базу данных.

for value_lst in dictn['rows']: 
    record_dict = dict(zip(dictn['field'], value_lst)) 
    db_model.save(record_dict) 

Где db_model.save() принимает словарь одной записи базы данных в формате

{ 
    u'time': u'2016-01-00:00', 
    u'met1': None, 
    ... so on for all the fields ... 
} 

и сохраняет его в базе данных.

+0

это не будет повторять для всех значений ,, я вижу он перебирает только один раз с именем столбца и значением – D14

+0

Первый 'for value_lst в dictn ['rows']' будет итерировать для всех наборов значений не только один. Второй 'dict (zip (dictn ['field'], value_lst))' принимает список имен столбцов, т.е. 'dictn ['field']' и (single record) список значений, т.е. 'value_lst', и возвращает словарь формата Я упомянул позже в своем ответе. И затем на каждой итерации запись 'record_dict' будет новой для каждой записи в dictn ['rows']' и будет передана методу i.e.db_model.save (record_dict) ', который сохранит его в базе данных. –

Смежные вопросы