【问题标题】:Django: how to process flat queryset to nested dictionary?Django:如何将平面查询集处理为嵌套字典?
【发布时间】:2018-09-20 12:25:31
【问题描述】:

我有一个表格,其中的数据如下所示:

|Country|State|City |Street|
|-------|-----|-----|------|
|  USA  | AZ  |city1| str1 |
|  USA  | AZ  |city1| str2 |
|  USA  | AZ  |city2| str1 |
|  USA  | AZ  |city2| str3 |
|  USA  | MN  |city3| str4 |
|  MEX  | CH  |city4| str5 |
|  MEX  | CH  |city4| str6 |

将其转换为嵌套字典的正确方法是什么? 我希望结果如下所示:

nested_dict = {
    'USA':{
        'AZ':{
            'city1':['str1','str2'],
            'city2':['str1','str3'], 
        },
        'MN':{
            'city3':['str3','str4'], 
        },
    },
    'MEX':{
        'CH':{
            'city4':['str5','str6'],
        },
    },
}

【问题讨论】:

  • 使用itertools.groupby 之类的工具。 SQL 数据库在“分层数据”方面不太好。

标签: python django django-models django-views


【解决方案1】:

您可以使用嵌套的defaultdict

from collections import defaultdict as dd

nested_dict = dd(lambda: dd(lambda: dd(list)))
for m in model.objects.all():
    nested_dict[m.Country][m.State][m.City].append(m.Street)

【讨论】:

  • 应该是list 而不是lambda: list?现在您将获得对list 类的引用。
  • @schwobaseggl 我怎样才能在模板中遍历这个nested_dict
  • @schwobaseggl 想通了。我关注了这个example
  • @ArtyomIlyin 你的意思是在你有 json 转储的某些前端框架中还是在 django 模板中?
  • @schwobaseggl 我的意思是在 django 模板中。我试图在上下文中传递 nested_dict 以在 django.views 中呈现模板。
猜你喜欢
  • 2020-07-20
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2011-06-19
  • 2016-06-16
  • 2016-06-29
  • 1970-01-01
相关资源
最近更新 更多