遍历字典列表的字典

Traversing through a dict of lists of dicts

我有一个包含字典和列表组合的字典,格式大致如下:

dict={
    category1: {
        [{sub_cat1: [{item1:datetime1},
                     {item2:val2}
                    ],
          sub_cat2: 'some-string',
          sub_cat3: some_int},
         {sub_cat1: [{item1:datetime3},
                     {item2:val4}
                    ],
          sub_cat2: 'some-string2',
          sub_cat3: some_int2},
                    .
                    .
        ],
    category2:{[]},
    category3:{[{some more stuff}]}
    }

目的是直接在dict中修改最底层里面的datetime对象。我可以写一个巨大的 for 循环来遍历所有内容,但我不知道是否有更有效的方法来遍历这个字典。

遍历任意嵌套的迭代对象通常使用递归函数完成,例如:

def change_datetime(new_datetime, dct):
    temp = enumerate(dct) if isinstance(dct, list) else dct.items()
    for index, i in :
        if hasattr(i, "__iter__"):
            change_datetime(new_datetime, i)
        elif isinstance(i, datetime.datetime):
            dct[index] = i

通过每次我们找到另一个可迭代对象时对 change_datetime 的新调用,我们可以检查层次结构中的每个 list/dict。