【问题标题】:Get nested dictionary获取嵌套字典
【发布时间】:2018-11-09 17:06:17
【问题描述】:

我在excel中有一个数据行

'Ars','Cr','Assl','Burg','Consp'

我想把它转换成这样的嵌套字典

 data_dict.update({'name':'Ars','children':[{
                  'name':'Cr','children':[{
                  'name':'Assl','children':[{
                  'name':'Burg','children':[{
                  'name':'Consp','children':[{
                  'none'}]}]}]}]}]}

我正在尝试编写一个递归方法来更新我的字典

def update(row,idx,data_dict):
   if idx==len(row):
     return data_dict
  else:
     data_dict.update({'name':row[idx],'children':update(row,idx+1,{})}

我很确定最后一行是错误的,但我无法找到创建此结构的方法

P.S 更新了问题以包括方括号 谢谢

【问题讨论】:

  • 'children':{'none'} 不是字典
  • 假设你有很多这样的行并且想要构建一种树结构。像{'Ars': {'Cr': {'Assl': {'Burg': {'Consp': None}}}}} 这样的结构不是更重要吗?否则,您将继续覆盖name

标签: python json python-3.x csv


【解决方案1】:

你可以使用reduce:

from functools import reduce

keys = ['Ars', 'Cr', 'Assl', 'Burg', 'Consp']

result = reduce(lambda x, y: {"name": y, "children": x}, reversed(keys), None)
print(result)

输出

{'name': 'Ars', 'children': {'name': 'Cr', 'children': {'name': 'Assl', 'children': {'name': 'Burg', 'children': {'name': 'Consp', 'children': None}}}}}

更新

如果您需要括号,请执行以下操作:

from functools import reduce

keys = ['Ars', 'Cr', 'Assl', 'Burg', 'Consp']

result = reduce(lambda x, y: {"name": y, "children": [x]}, reversed(keys), None)
print(result)

输出

{'name': 'Ars', 'children': [{'name': 'Cr', 'children': [{'name': 'Assl', 'children': [{'name': 'Burg', 'children': [{'name': 'Consp', 'children': [None]}]}]}]}]}

基本上只需在 lambda 函数中在 x 周围添加括号。

【讨论】:

  • reduce 比我的更漂亮 - 不错
  • 嗨 Daniel 感谢您的回答,但是我犯了一个错误,我需要将孩子用 '[]' 方括号括起来。你能帮我解决一下吗
  • 嗨,Rohit,你能举个例子来说明一下吗?
  • @Rohit 更新了答案!
【解决方案2】:
l = ['Ars','Cr','Assl','Burg','Consp']

d_ = d = {}

for name, val in zip(l, l[1:]):
    d['name'] = val
    d['children'] = d = {}

d_

评估为

{'name': 'Cr',
 'children': {'name': 'Assl',
  'children': {'name': 'Burg', 'children': {'name': 'Consp', 'children': {}}}}}

【讨论】:

    猜你喜欢
    • 2021-05-10
    • 2021-04-28
    • 1970-01-01
    • 2021-11-01
    • 2019-03-05
    • 2019-05-27
    • 2021-02-05
    • 2013-02-19
    • 2015-03-23
    相关资源
    最近更新 更多