【问题标题】:Problems while trying to extract all the values from a nested dictionary?尝试从嵌套字典中提取所有值时出现问题?
【发布时间】:2019-07-30 05:37:25
【问题描述】:

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

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

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

【问题讨论】:

  • 请在此处复制粘贴d中的数据,无法访问您的链接
  • 一本字典只有一个键值,“列出所有值”是什么意思?
  • @AlexandreAragão,该值也可以是一个列表。
  • @Austin 是的,值(没有's')可以是一个列表,仍然是一个值,而不是 valueS,这就是我问的原因

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


【解决方案1】:

将键 _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']

【讨论】:

【解决方案2】:

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

def findDataFromNestedDict(nestedDict, dict_keys):
    if dict_keys in nestedDict.keys():
        return nestedDict[dict_keys]
    for key, value in nestedDict.items():
        if isinstance(value, dict):
            return  findDataFromNestedDict(value,dict_keys)

data =  findDataFromNestedDict(yourDictionary, yourKey)

【讨论】:

【解决方案3】:

假设你的 dic 是这样的:

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

如果您想从 [1,2,3] 中得到 1,2,3,请执行以下操作:

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

【讨论】:

    猜你喜欢
    • 2017-12-14
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    • 2021-11-04
    • 2019-12-12
    • 1970-01-01
    • 2014-12-06
    • 1970-01-01
    相关资源
    最近更新 更多