【问题标题】:Python 3: Flatten Dictionary including listsPython 3:扁平化字典,包括列表
【发布时间】:2022-10-24 15:55:20
【问题描述】:

有没有一种优雅的方法可以在 python 3 中实现这一点?它应该展平字典,同时将列表索引视为键,从而将它们包括在展平中。

在:

{
  "a": 1,
  "b": {
    "c": 2
  },
  "d": [3,4],
  "e": [
    {
      "f": 5
    },
    {
      "g": 6
    }
  ]
}

出去:

{
  "a": 1,
  "b.c": 2,
  "d.0": 3,
  "d.1": 4,
  "e.0.f": 5,
  "e.1.g": 6
}

背景:

  • 我们正在寻找一种方法来合并包含列表的嵌套字典
  • 可用的合并工具似乎总是使用追加策略或替换策略合并列表
  • 然而,我们需要合并列表中的字典(如示例中所示)。例如,列表中的第一个字典应该与列表中的第一个字典合并
  • 当前的方法是像这样链接:flatten -> merge -> unflatten。问题只是关于扁平的部分。从那以后,我们已经看到 unflatten 更棘手

【问题讨论】:

标签: python python-3.x list dictionary flatten


【解决方案1】:
d= {
  "a": 1,
  "b": {
     "c": 2
   },
  "d": [3,4],
   "e": [
    {
       "f": 5
     },
     {
       "g": 6
     }
   ]
 }
result={}
def f(d,s=''):
     if type(d)==dict:
        for k,v in d.items():
            f(v,s=s+k+'.')
    elif type(d)==list:
        for i,v in enumerate(d):
            f(v,s=s+str(i)+'.')
    else:
        result[s[:-1]]=d
f(d)
print(result)
        

【讨论】:

    猜你喜欢
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2022-01-17
    • 2017-02-27
    • 2016-01-14
    相关资源
    最近更新 更多