1

我有一个可能很简单的问题,但我还没有找到解决方案。我试图在字符串变量的帮助下访问 2-dim 字典,但无法正确访问它。在我的代码上下文中,我可以将密钥保存在字符串变量中,这一点非常重要

一个简单的例子:

x = {"one":{"one":1},"two":2}
s1 = "two"
x[s1]                                                                                                                                      
2                                                                                                                                              
s2 = '["one"]["one"]'                                                                                                                                            
x[s2]
Traceback (most recent call last):                                                                                                             
File "<stdin>", line 1, in <module>                                                                                                          
KeyError: '["one"]["one"]'                                                                                                                       

有没有办法将这个 2-dim 键存储到变量中,以便以后访问字典?

4

2 回答 2

5

最好的方法是使用一个tuple键而不是这样的字符串,例如。

>>> # from functools import reduce (uncomment in Py3)
>>> x = {"one":{"one":1},"two":2}
>>> def access(d, keys):
        return reduce(dict.get, keys, d)


>>> access(x, ("two", ))
2
>>> access(x, ("one", "one"))
1
于 2013-04-29T07:03:46.963 回答
1

你所要求的似乎是一个糟糕的主意。为什么弦一定要像你说的那样?如果您对中间字典不感兴趣 - 只需使用整个字符串作为键

>>> x = {'["one"]["one"]':1,"two":2}
>>> s1 = "two"
>>> x[s1]                                                                                                                                      
2
>>> 2                                                                                                                                              
2
>>> s2 = '["one"]["one"]'                                                                                                                                            
>>> x[s2]
1
于 2013-04-29T07:09:41.870 回答