代码之家  ›  专栏  ›  技术社区  ›  user9074332

如何从文件创建嵌套词典列表

  •  3
  • user9074332  · 技术社区  · 6 年前

    我有一个包含键/值对列表的输入文本文件,我希望将其作为字典列表读入python,但似乎无法使其按预期工作。请注意,该文件是 所以我不能使用 json 这个问题是 复制品 this

    # /tmp/tmp.txt
    [{'k1': {'k2': {'k3': ['a', 'b', 'c']}}}, {'k4': {'k5': {'k6': ['v', 'x', 'y', 'z']}}}]
    

    由于该文件包含一个包含2个元素的列表,因此 len type 成为 list 但这不是我看到的。

    with open('/tmp/tmp.txt', encoding='utf-8') as data_file:
        data = data_file.read()
    
    print(len(data)) # <-- the goal is for this to show 2
    print(type(data)) # <-- the goal is for this to return `list`
    

    输出:

    88
    <class 'str'>
    
    3 回复  |  直到 6 年前
        1
  •  2
  •   DYZ    6 年前

    你的 data literal_eval :

    import ast
    data_list = ast.literal_eval(data)
    len(data_list)
    #2
    
        2
  •  1
  •   Shai Léger    6 年前

    编辑:我之前没有看到DYZ在我前面回答,但我想解释一下我的答案。

    有一个名为'ast'的模块具有函数'literal\u eval',顾名思义,它以python代码的形式计算txt的信息,并验证输入。

    import os, ast
    
    with open('/tmp/tmp.txt', encoding='utf-8') as data_file:
        data = ast.literal_eval(data_file.read())
    
    print(len(data))
    print(type(data))
    

    输出:

    2
    <class 'list'>
    
        3
  •  -1
  •   Joseph Broz    6 年前

    如果您试图存储和检索Python对象,序列化可能是更好的方法。例如,参见 pickle module .

    但是,在当前上下文中,可以使用内置的Python eval 完成你的目标。