相关疑难解决方法(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万
查看次数

通过键列表访问嵌套的字典项?

我有一个复杂的字典结构,我想通过一个键列表访问,以解决正确的项目.

dataDict = {
    "a":{
        "r": 1,
        "s": 2,
        "t": 3
        },
    "b":{
        "u": 1,
        "v": {
            "x": 1,
            "y": 2,
            "z": 3
        },
        "w": 3
        }
}    

maplist = ["a", "r"]
Run Code Online (Sandbox Code Playgroud)

要么

maplist = ["b", "v", "y"]
Run Code Online (Sandbox Code Playgroud)

我已经制作了以下代码,但是我确信如果有人有想法,有更好更有效的方法.

# Get a given data from a dictionary with position provided as a list
def getFromDict(dataDict, mapList):    
    for k in mapList: dataDict = dataDict[k]
    return dataDict

# Set a given data in a dictionary with position provided as a list
def …
Run Code Online (Sandbox Code Playgroud)

python dictionary list

128
推荐指数
5
解决办法
10万
查看次数

即时生成字典键

使用深层嵌套的python dicts,我希望能够在这样的数据结构中分配值,如下所示:

  mydict[key][subkey][subkey2]="value"
Run Code Online (Sandbox Code Playgroud)

无需检查mydict [key]等实际上是否设置为dict,例如使用

  if not key in mydict: mydict[key]={}
Run Code Online (Sandbox Code Playgroud)

子代的创建应该在飞行中发生.什么是允许等价的最优雅方式 - 可能在标准上使用装饰器<type 'dict'>

python dictionary decorator

11
推荐指数
2
解决办法
7586
查看次数

深集python字典

我有一个保存的 Python 字典键列表:

['level_one', 'level_two', 'test']

这些是字典的键:

mydict = {
    'level_one' : {
        'level_two' : {
            'test' : "Hello World"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

通常我可以这样设置test键:

mydict['level_one']['level_two']['test'] = "Hello StackOverflow"

不幸的是,列表/字典是即时生成的,我不知道它能走多远。是否有可能在不使用大括号的情况下通过键列表更新 dict 键?

我只能反映这个获取字符串的功能:

def deepGet(sourceDict, *keys):
    return reduce(lambda d, k: d.get(k) if d else None, keys, sourceDict)

> deepGet(mydict, *['level_one', 'level_two', 'test'])
>> Hello World
Run Code Online (Sandbox Code Playgroud)

不是重复的。这是关于设置,而不是获取嵌套字典。

python dictionary python-2.7

7
推荐指数
2
解决办法
1691
查看次数

获取嵌套字典项目的最佳方法

这个主题并不新鲜,已经在多个帖子中讨论过(链接位于底部)。然而,我觉得资源分散,并不总是清楚什么是最好的方法。我还想引入一些约束来明确定义我期望的行为。

假设我们有一个包含任意数量的项目和任意深度的嵌套字典:

d = {"a": {"b": {"c" : 0}},
     "b": {"c" : 1},
     "c": 2}
Run Code Online (Sandbox Code Playgroud)

获取其物品的最佳方式是什么?

这种简单的方法相当麻烦,尤其是当有很多嵌套级别时。

>>> d["a"]["b"]["c"]
0
Run Code Online (Sandbox Code Playgroud)

因此,第一个约束是要获取的项的键必须以元组的形式提供,例如:

key = ("a", "b", "c")
Run Code Online (Sandbox Code Playgroud)

现在的目标是创建一些工作原理如下的函数:

>>> getitem(d, key)
0
Run Code Online (Sandbox Code Playgroud)

这种格式也可以方便地直接应用为__getitem__类的方法。

还有一个限制:我希望该函数在被要求获取不存在的密钥时大声失败。

>>> getitem(d, ("asd",))
...
KeyError: 'asd'
Run Code Online (Sandbox Code Playgroud)

这排除了所有使用项目获取来使字典生动的解决方案。

最后,如果可能,请提供低级代码。如果您知道解决此问题的包,请解释底层机制。

参考

python dictionary nested

3
推荐指数
1
解决办法
1万
查看次数

在没有NoneType错误的情况下访问嵌套dicts的pythonic方法是什么

我有一个深嵌套的dict(从json解码,来自instagram api).我的初始代码是这样的:

caption = post['caption']['text']
Run Code Online (Sandbox Code Playgroud)

但是如果'caption'键或'text'键不存在,那将抛出NoneType或KeyError错误.

所以我想出了这个:

caption = post.get('caption', {}).get("text")
Run Code Online (Sandbox Code Playgroud)

哪个有效,但我不确定它的风格.例如,如果我将此技术应用于我正在尝试检索的更深层次的嵌套属性之一,它看起来非常难看:

image_url = post.get('images',{}).get('standard_resolution',{}).get('url')
Run Code Online (Sandbox Code Playgroud)

有没有更好,更pythonic的方式来写这个?我的目标是检索数据(如果有的话),但如果数据不存在则不会阻止执行.

谢谢!

python dictionary styles nonetype keyerror

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

如何检查多维字典中是否存在key?

array = {"key1":{"key2":"value"}}

if 'key1' in array:
    if 'key2' in array['key1']:
        print(array['key1']['key2'])
    else
        print(0)
Run Code Online (Sandbox Code Playgroud)

在php中是这样的if(isset(array[key1][key2]))

python

0
推荐指数
1
解决办法
2459
查看次数