簡體   English   中英

如何將嵌套字典轉換為python中的表

[英]How can I convert a nested dictionary to a table in python

假設我有一個嵌套的字典,比如一本書的章節和章節(平衡的樹結構)。 我想將它轉換為一個表,其中每個分支都是一行,鍵是葉子值之外的值。

{
  "A1": {
      "A1-1": {
        "A1-1-1": "0.2028",
        "A1-1-2": "0.1901",
      },
      "A1-2": {
        "A1-2-1": "0.1951",
        "A1-2-2": "0.1806",
      },
   },
   "A2" {

             ...

喜歡:

A1   A1-1  A1-1-1 0.2028
A1   A1-1  A1-1-2 0.1901
A1   A1-2  A1-2-1 0.1951

我嘗試使用json_normalize(data)但它只給出了 1 行和一些嵌套的列標題。

您可以使用一些遞歸處理:

def superitems(obj):
    if isinstance(obj, dict):
        for k, v in obj.items():
            for i in superitems(v):
                yield (k,) + i
    else:
        yield (obj,)
 
[*superitems(data)]
# [('A1', 'A1-1', 'A1-1-1', '0.2028'), 
#  ('A1', 'A1-1', 'A1-1-2', '0.1901'), 
#  ('A1', 'A1-2', 'A1-2-1', '0.1951'), 
#  ('A1', 'A1-2', 'A1-2-2', '0.1806')]

這可以用於任何輸出:

print("\n".join(map("\t".join, superitems(data))))
A1  A1-1    A1-1-1  0.2028
A1  A1-1    A1-1-2  0.1901
A1  A1-2    A1-2-1  0.1951
A1  A1-2    A1-2-2  0.1806
  1. 你需要先把字典弄平,我找到了這段代碼,但我找不到它的歸屬; 但它有效:
def flatten(d, c = []):
   for a, b in d.items():
      yield from([c + [a, b]]
         if not isinstance(b, dict)
         else flatten(b, c + [a]))
  1. 使用制表以您想要的格式生成輸出表
dict = {....}
output = list(flatten(dict))
print(tabulate(output))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM