我有一个这样的文件:
>>> k = {'finance_pl':{'S':{'2008':45,'2009':34}}}
Run Code Online (Sandbox Code Playgroud)
正常的访问方式是:
>>> k['finance_pl']['S']
{'2008': 45, '2009': 34}
Run Code Online (Sandbox Code Playgroud)
但是,在我的情况下,最终用户会给我输入 finance_pl.S
我可以拆分它并像这样访问字典:
>>> doc_list = doc.split('.')
>>> k[doc_list[0]][doc_list[1]]
{'2008': 45, '2009': 34}
Run Code Online (Sandbox Code Playgroud)
但是,我不想这样做,因为字典结构可能会改变,用户可以给出类似的东西,finance_pl.new.S而不是k['finance_pl']['S']或k[doc_list[0]][doc_list[1]].
我需要直接应用用户输入的东西(例如:如果是输入finance_pl.new.S,我应该能够将此.split('.')方法应用于用户输入并直接应用).
这样做的优雅方式是什么?
我只是循环遍历所有部分:
def getter(somedict, key):
parts = key.split(".")
for part in parts:
somedict = somedict[part]
return somedict
Run Code Online (Sandbox Code Playgroud)
之后我们有了
>>> getter(k, "finance_pl.S")
{'2008': 45, '2009': 34}
Run Code Online (Sandbox Code Playgroud)
要么
>>> getter({"a": {"b": {"c": "d"}}}, "a")
{'b': {'c': 'd'}}
>>> getter({"a": {"b": {"c": "d"}}}, "a.b.c")
'd'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |