相关疑难解决方法(0)

实现嵌套字典的最佳方法是什么?

我有一个数据结构,基本上相当于嵌套字典.让我们说它看起来像这样:

{'new jersey': {'mercer county': {'plumbers': 3,
                                  'programmers': 81},
                'middlesex county': {'programmers': 81,
                                     'salesmen': 62}},
 'new york': {'queens county': {'plumbers': 9,
                                'salesmen': 36}}}
Run Code Online (Sandbox Code Playgroud)

现在,保持和创造这个是非常痛苦的; 每当我有一个新的州/县/专业时,我必须通过令人讨厌的try/catch块创建下层词典.而且,如果我想要遍历所有值,我必须创建恼人的嵌套迭代器.

我也可以使用元组作为键,如下:

{('new jersey', 'mercer county', 'plumbers'): 3,
 ('new jersey', 'mercer county', 'programmers'): 81,
 ('new jersey', 'middlesex county', 'programmers'): 81,
 ('new jersey', 'middlesex county', 'salesmen'): 62,
 ('new york', 'queens county', 'plumbers'): 9,
 ('new york', 'queens county', 'salesmen'): 36}
Run Code Online (Sandbox Code Playgroud)

这使得迭代值非常简单和自然,但是做聚合和查看字典的子集(例如,如果我只想逐个状态)这样做更具语法上的痛苦.

基本上,有时我想将嵌套字典视为平面字典,有时我想将其视为复杂的层次结构.我可以把它全部包装在一个类中,但似乎有人可能已经完成了这个.或者,似乎可能有一些非常优雅的语法结构来做到这一点.

我怎么能做得更好?

附录:我知道setdefault()但它并没有真正实现干净的语法.此外,您创建的每个子词典仍需要setdefault()手动设置.

python mapping dictionary autovivification data-structures

195
推荐指数
12
解决办法
9万
查看次数

将字典列表转换为嵌套字典

关于这个主题有很多问题,但我还没有能够根据我的情况调整解决方案.假设我有一个平面文件列表:

[{'Name': 'Jim', 'Attribute': 'Height', 'Value': '6.3'},
 {'Name': 'Jim', 'Attribute': 'Weight', 'Value': '170'},
 {'Name': 'Mary', 'Attribute': 'Height', 'Value': '5.5'},
 {'Name': 'Mary', 'Attribute': 'Weight', 'Value': '140'}]
Run Code Online (Sandbox Code Playgroud)

我想将它转换为嵌套字典,以便属性/值对与每个名称相关联:

{ 
    'Jim': {'Height': '6.3', 'Weight': '170'},
    'Mary': {'Height': '5.5', 'Weight': '140'}
}
Run Code Online (Sandbox Code Playgroud)

python

4
推荐指数
2
解决办法
2691
查看次数