Gan*_*ana 27 python dictionary
我是python的新手,在解决问题时需要帮助:
我有一本字典
tmpDict = {'ONE':{'TWO':{'THREE':10}}}
Run Code Online (Sandbox Code Playgroud)
除了这样做之外,我们还有其他任何方式可以访问THREE的价值吗?
tmpDict['ONE']['TWO']['THREE']
Run Code Online (Sandbox Code Playgroud)
?
ch3*_*3ka 29
和python一样,当然有几种方法可以做到,但有一种明显的方法可以做到这一点.
tmpdict["ONE"]["TWO"]["THREE"] 这是显而易见的方法.
当这与您的算法不匹配时,这可能暗示您的结构不是问题的最佳结构.
如果你只想保存重复输入,你当然可以为dict的一个子集添加别名:
>>> two_dict = tmpdict['ONE']['TWO'] # now you can just write two_dict for tmpdict['ONE']['TWO']
>>> two_dict["spam"] = 23
>>> tmpdict
{'ONE': {'TWO': {'THREE': 10, 'spam': 23}}}
Run Code Online (Sandbox Code Playgroud)
小智 9
我的实施:
def get_nested(data, *args):
if args and data:
element = args[0]
if element:
value = data.get(element)
return value if len(args) == 1 else get_nested(value, *args[1:])
Run Code Online (Sandbox Code Playgroud)
用法示例:
>>> dct={"foo":{"bar":{"one":1, "two":2}, "misc":[1,2,3]}, "foo2":123}
>>> get_nested(dct, "foo", "bar", "one")
1
>>> get_nested(dct, "foo", "bar", "two")
2
>>> get_nested(dct, "foo", "misc")
[1, 2, 3]
>>> get_nested(dct, "foo", "missing")
>>>
Run Code Online (Sandbox Code Playgroud)
如果缺少密钥,则不会引发异常,在这种情况下不返回任何值.
你可以在每个字典上使用get().确保为每次访问添加了None检查.
Sivasubramaniam Arunachalam 或 ch3ka 已经给出了答案。
我只是添加了答案的表演视图。
dicttest={}
dicttest['ligne1']={'ligne1.1':'test','ligne1.2':'test8'}
%timeit dicttest['ligne1']['ligne1.1']
%timeit dicttest.get('ligne1').get('ligne1.1')
Run Code Online (Sandbox Code Playgroud)
给我们 :
每个循环 112 ns ± 29.7 ns(7 次运行的平均值 ± 标准偏差,每次 10000000 次循环)
每个循环 235 ns ± 9.82 ns(7 次运行的平均值 ± 标准偏差,每次 1000000 次循环)