首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Python中的嵌套字典中获取值

从Python中的嵌套字典中获取值
EN

Stack Overflow用户
提问于 2022-09-25 21:44:39
回答 2查看 166关注 0票数 0

我有一本嵌套字典:

代码语言:javascript
运行
复制
nested_dict = {"fruit": {"apple":{"status": "new", "sold": True},
                         "banana": 10,
                         "watermelon": 30},
               "meat": {"red": 39, "white": 13}}

res = nested_dict.get("fruit", {}).get("apple", {}).get("status")
if res:
    print(f"{res = }")

从这样的嵌套字典中提取值是最好的实践吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-09-25 22:14:56

我不太确定速度,但就我个人而言,我喜欢以访问列表、元组或大多数其他python数据结构的元素的方式引用字典元素,例如:

代码语言:javascript
运行
复制
In [24]: res = nested_dict["fruit"]["apple"]["status"]

In [25]: print(res)
new

我还应该注意,看起来您正在构建一个名为JSON文件的东西,这是一种公共文件格式,Python有一个很好的模块,即json模块。可能值得一查!

票数 0
EN

Stack Overflow用户

发布于 2022-10-07 04:43:55

你问题中的建议很好。

如果您有很多这样的数据,那么可能值得编写一些helper codem,以避免重复,或者安装一个3 3rdy各方库,使处理嵌套数据更容易。

其中一个库是我编写的一个名为"extradict“的项目(它可以与pip install extradict一起安装)。它具有一个NestedData类,它可以保存嵌套的字典和列表,并允许使用键中的点符号进行项访问。因此,在本例中,您可以使用简单的["fruit.apple.status"]来获取数据。下面是完整的片段:

代码语言:javascript
运行
复制
In [1]: nested_dict = {"fruit": {"apple":{"status": "new", "sold": True},
   ...:                          "banana": 10,
   ...:                          "watermelon": 30},
   ...:                "meat": {"red": 39, "white": 13}}


In [2]: from extradict import NestedData

In [3]: nested = NestedData(nested_dict)

In [4]: nested.get("fruit.apple.status")
Out[4]: 'new'
In [5]: nested.get("fruit.mango.status")
<None>
In [7]: 

但是,请注意,在这个特定的示例中,如果您试图获得包含数字的水果的“状态”,而不是包含状态键的另一个dict,您将在extradict.NestedData中得到一个错误。希望这只是示例数据,而且您周围没有这样的异构数据结构。

代码语言:javascript
运行
复制
In [7]: nested_dict.get("fruit", {}).get("banana", {}).get("status")
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
(...)
AttributeError: 'int' object has no attribute 'get'

In [8]: nested.get("fruit.banana.status")
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
(...)
TypeError: 'int' object is not subscriptable
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73848031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档