簡體   English   中英

將 excel 轉換為嵌套字典

[英]Convert excel to nested dictionary

我嘗試將 excel 文件轉換為 python 字典。 excel 如下所示擅長

我想要的字典如下

[
  {
    "ipam.prefixes": [
      {
        "10.0.1.0/28": {
          "prefix": "10.0.1.0/28",
          "status": "container",
          "vlan": {"vid": 200}
        }
      }
  ]
]

如果 excel 數據是平坦的,比如“前綴”和“狀態”,我可以轉換它們,但是如果有額外的數據,我不知道如何制作它。 excel 中的大多數數據是基本的鍵/值對,但一些隨機項將是 key:{key1:value} 或 key:{key1:value1, key2:value2},我嘗試找到一種通用的方法來轉換它們到正確的字典,不管用戶輸入什么。 如果 python 代碼易於操作數據,則可以更改 excel 的格式。

你可能會嘗試這樣的事情:

import pprint
import pandas as pd
dfs = pd.read_excel('test.xlsx', sheet_name=None)
res = {}
for sheet_name, df in dfs.items():
    df_dict = df.to_dict()  # TODO : check if there is at least 4 rows, otherwise it will crash
    subname = df_dict['prefix'][0]
    res[sheet_name] = [
        {subname:{
            key: df_dict[key][0] if pd.isna(df_dict[key][1])
                 else {df_dict[key][0]: df_dict[key][1]} if pd.isna(df_dict[key][3])
                 else {df_dict[key][0]: df_dict[key][1], df_dict[key][2]: df_dict[key][3]}
                 for key in df_dict.keys()
        }}
    ]
pprint.pprint(res)

這遠非完美,並且有很多警告(例如,如果沒有 4 行,則必須向數據框中添加行),並且我做了一些假設(例如,您不會有超過兩個級別的鍵:值對,或者您將始終擁有一個'prefix'鍵)。

那仍然應該是一個好的開始。

請注意,您問題中的 output 缺少括號,因此此代碼 output 可能與您要求的代碼略有不同

暫無
暫無

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

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