递归嵌套字典和列表

时间:2018-08-21 13:41:47

标签: python python-3.x nested

这是我以前的问题之一的后续问题。我有一些字典,需要查看它们包含的每个值,如果该值是日期时间,则需要以特定方式设置其格式。我还需要能够递归到嵌套的字典和列表中。这是我到目前为止的内容:

signed int mySignInt = 42;
unsigned int myUnsignInt = 42;

这对字典和嵌套字典非常有用,但对列表则不那么有用。因此,在上面的示例中,fix_recursive将纠正SomeDateField1和SubDateField4_1,但不能纠正SubDateField3_1,SubDateField3_2或SubDateField3_3。另外,由于我不知道输入之前会是什么样子,因此我试图创建一个函数,该函数可以获取列出的嵌套3层或4层深度中的值。

建议将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:3)

您需要区分遍历列表和字典

def fix_recursive(obj):

    if isinstance(obj, list):  # could replace with collections.abc.MutableSequence
        itr = enumerate(obj)
    elif isinstance(obj, dict):  # could replace with collections.abc.MutableMapping
        itr = obj.items()
    else:
        return  # don't iterate -- pass back up

    for key, value in itr:
        if isinstance(value, datetime.datetime):
            obj[key] = fix_time(value)
        else:
            fix_recursive(value)

答案 1 :(得分:-1)

  1. 让您的当前路线畅通,为递归功能添加列表支持。
  2. 为什么要使用fix_time进行序列化和反序列化?使用JSON或pickle,无需转换日期时间。