我有一本嵌套字典:
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 = }")从这样的嵌套字典中提取值是最好的实践吗?
发布于 2022-09-25 22:14:56
发布于 2022-10-07 04:43:55
你问题中的建议很好。
如果您有很多这样的数据,那么可能值得编写一些helper codem,以避免重复,或者安装一个3 3rdy各方库,使处理嵌套数据更容易。
其中一个库是我编写的一个名为"extradict“的项目(它可以与pip install extradict一起安装)。它具有一个NestedData类,它可以保存嵌套的字典和列表,并允许使用键中的点符号进行项访问。因此,在本例中,您可以使用简单的["fruit.apple.status"]来获取数据。下面是完整的片段:
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中得到一个错误。希望这只是示例数据,而且您周围没有这样的异构数据结构。
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 subscriptablehttps://stackoverflow.com/questions/73848031
复制相似问题