尝试从嵌套字典中提取所有值时遇到问题?

时间:2019-07-30 05:37:25

标签: python python-3.x dictionary data-structures

我有以下嵌套的dict。如何在列表中提取键'_type'的所有值?我试图:

for e in d.values():
    print (e['_type'])

但是,我得到了TypeError: string indices must be integers。在这种情况下,哪种方法应该是提取所有可能占用_type的可能值的正确方法?

3 个答案:

答案 0 :(得分:3)

将键_type的所有值提取到列表中(使用递归):

def extract_keys(d):
    if isinstance(d, dict):
        for k, v in d.items():
            if k=='_type':
                yield v
            else:
                yield from extract_keys(v)
    elif isinstance(d, list):
        for v in d:
            yield from extract_keys(v)

out = list(extract_keys(d)) # variable `d` is your dict from your question

print(out)

打印:

['FunctionDef', 'arguments', 'arg', 'Expr', 'Str', 'Assign', 'Name', 'Store', 'Num', 'For', 'Assign', 'Name', 'Store', 'BinOp', 'BinOp', 'BinOp', 'Name', 'Load', 'BitXor', 'Call', 'Name', 'Load', 'Name', 'Load', 'Add', 'BinOp', 'BinOp', 'Name', 'Load', 'RShift', 'Num', 'Add', 'BinOp', 'Name', 'Load', 'LShift', 'Num', 'BitAnd', 'Num', 'Name', 'Load', 'Name', 'Store', 'Return', 'Name', 'Load']

答案 1 :(得分:1)

您可以使用键从嵌套字典中找到任何数据:

{{1}}

答案 2 :(得分:-2)

假设您的骰子是这样的:

dic = {'hi':[1,2,3], 'hello': [4,5,6]}

您想从[1,2,3]中获得1、2、3,请执行以下操作:

for e in dic['hi']:
    print(e)