Python 将复杂字典插入sqlite数据库?

Python 将复杂字典插入sqlite数据库?,python,sqlite,dictionary,Python,Sqlite,Dictionary,我有一本字典,其结构如下: mydict = {0: {10001: {'simple': 1, 'example': 2}, 10002: {'simple': 2, 'example': 1}}, 1: {20002: {'simple': 0, 'example': 2}}} 顶级键与sqlite db没有关系,但是10001、10002、20002键都表示同一个表中的主键,它们附带的字典也包含要插入的属性。我想出的方法是: top_level_keys = mydict.keys()

我有一本字典,其结构如下:

mydict = {0: {10001: {'simple': 1, 'example': 2}, 10002: {'simple': 2, 'example': 1}}, 1: {20002: {'simple': 0, 'example': 2}}}
顶级键与sqlite db没有关系,但是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]]
然而,添加到表中的列越多,列表越长。。。声明变成了-现在大约是30。我也可以迭代这些键,但这样会丢失sqlite插入的顺序


有更简单/更好的方法吗?

您可以提前将密钥/顺序指定为列表:

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]

谢谢,当答案是一个简单的列表时,我花了太多时间试图找到一个聪明的方法来排序!