【问题标题】:How can I get the keys from a nested dictionary?如何从嵌套字典中获取键?
【发布时间】:2019-12-04 06:54:47
【问题描述】:

我在字典中的字典中有一个列表:

{FirmA:{ProductA:[Color1,Color2,Color3]}}

我想从 First Firm 字典级别构建一个键列表。

然后,我需要根据公司密钥访问二级产品字典。

最后,我需要根据字典级别 2(产品)中的产品键访问颜色列表。

我试图为公司获取 1 级密钥:

[i for i in dict.keys()]

返回

ValueError: Too many values to unpack

这是一个相当大的数据集。

我还没有进入二级词典。

【问题讨论】:

  • @shash678 我在答案中更新了它,我使用的实际字典太大了。
  • 因为我没有使用列表作为键,只是一个值。
  • 如果您仍然需要帮助,请提供导致您所询问的错误的minimal reproducible example

标签: python python-2.7 dictionary nested


【解决方案1】:

这样的事情应该可以帮助您入门:

def get_products_for_firm(d, firm):
    firm_letter = firm[-1]
    product_prefix = "Product"
    product_key = "%s%s" % (product_prefix, firm_letter)
    return d[firm][product_key]


d = {
    "FirmA": {
        "ProductA": ["Color1", "Color2", "Color3"]
    },
    "FirmB": {
        "ProductB": ["Color4", "Color5", "Color6"]
    }
}

firm_keys = d.keys()
print "The firm keys are %s: " % (firm_keys)

for firm_key in firm_keys:
    print "The products for %s are: %s" % (firm_key,
                                           get_products_for_firm(d, firm_key))

输出:

The firm keys are ['FirmA', 'FirmB']:
The products for FirmA are: ['Color1', 'Color2', 'Color3']
The products for FirmB are: ['Color4', 'Color5', 'Color6']

【讨论】:

    【解决方案2】:

    那又怎样:

    d = {'foo':{'bar':42}}
    
    # you can do much like for nested list, like so:
    print(d['foo'])
    print(d['foo']['bar'])
    
    # or you can iterate:
    for k,v in d.items():
        print(k,v)
    
        # if the value is also a dictionary, iterate on it again:
        try:
            for k2, v2 in v.items():
                if isinstance(v2, list):
                    for el in v2:
                        print el
        except:
            pass
    

    编辑:实际上,如果它是一个大型数据集,并且在第一次传递实际上是一个字典下面的值很少,那么进行实例检查 (isinstance(v, dict)) 可能会更快,因为捕获成本很高。取决于细节....

    【讨论】:

    • for k,v in d.items(): print(k,v) 这可以打印,但我需要将这些键附加到列表中。然后,下一步将使用第一个字典列表中的键访问第二个字典。
    • 这样很容易复制整个内容以查看/理解输出。然后,您可以随心所欲地使用它!
    • for key, value in d.iteritems(): li.append(key) 返回ValueError: Too many values to unpack 注意:我使用的是 Python 2.7
    • 实际上并不清楚你想做什么。上面你有可以用来操作字典的语法......要么澄清问题,要么使用上面的语法。您确实拥有所需的工具来访问数据中所需的任何内容。
    • Cathing is expensive?可能是,取决于数据结构,但这取决于 OP 进行一些测试;)
    猜你喜欢
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 2021-09-03
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多