2014-09-26 2 views
0

У меня есть словарь, который следует следующей структуре:Вставка сложных словарей в базу данных sqlite?

mydict = {0: {10001: {'simple': 1, 'example': 2}, 10002: {'simple': 2, 'example': 1}}, 1: {20002: {'simple': 0, 'example': 2}}} 

Ключа верхнего уровня не имеет никакого отношения к БД SQLite, однако 10001, 10002, 20002 ключей все представляют собой первичные ключи в той же таблице, с их прилагаемые словари, содержащие атрибуты, также должны быть вставлены. Метод, который я придумал:

top_level_keys = mydict.keys() 
list_of_lists = []  
for key in top_level_keys: 
    primary_keys = mydict[key].keys() 
    for k in primary_keys:  
     list_of_lists.append([k, mydict[key][k]["example"],mydict[key][k]["simple"]]) 

Это дает мне список всех записей в порядке, мне нужно для простой вставки:

[[10001, 2, 1], [10002, 1, 2], [20002, 2, 0]] 

Чем больше столбцов, которые добавляются в таблицу, однако , дольше, чем list_of_lists.append ... утверждение становится - сейчас около 30. Я мог бы итерации через эти ключи, но потом потерял бы порядок для вставки sqlite.

Есть ли более простой/лучший способ сделать это?

ответ

0

Вы можете указать Ваши ключи/заказ заранее, как список:

my_ordered_fields = ['example','simple'] #or ['example','simple','next','more next','..etc..'] 

Кроме того, обратите внимание, вы можете конденсироваться ваш код просто итерация по клавишам непосредственно вместо того, чтобы объявить их значение.

list_of_lists = []  
for key in mydict.keys(): 
    for k in mydict[key].keys(): 
     this_entry = [k] 
     for ordered_field in my_ordered_fields: 
      this_entry.append(mydict[key][k][ordered_field]) 
     list_of_lists.append(this_entry) 

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

Вы также можете использовать некоторые списки, если хотите немного сконфигурировать код, хотя он определенно поставляется за счет удобочитаемости/прозрачности.

sub_dicts = [lower_dict for lower_dict in mydict.values()] 
list_of_lists = [[[lower_key]+[lower_dict[my_field] for my_field in my_ordered_fields] for lower_key,lower_dict in sub_dict.items()] for sub_dict in sub_dicts] 
+0

Спасибо, я потратил слишком много времени, пытаясь найти умное средство для сортировки, когда ответ был простым списком! – Groundhog

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