不确定如何以我想要的方式将元组用作一组字符串。
我希望我的json看起来像:
'item': {
'a': {
'b': {
'c': 'somevalue'
}
}
}
可以通过以下方式完成:
item = {}
item['a']['b']['c'] = "somevalue"
但是a
,b
和c
是动态的,所以我理解我需要使用tuple
,但这不符合我的要求:< / p>
item = {}
path = ('a','b','c')
item[path] = "somevalue"
json.dump(item, sys.stdout)
所以我收到错误:
TypeError("key " + repr(key) + " is not a string"
如何动态获取item['a']['b']['c']
?
答案 0 :(得分:0)
AFAIK此任务没有内置函数,因此您需要编写几个递归函数:
def xset(dct, path, val):
if len(path) == 1:
dct[path[0]] = val
else:
if path[0] not in dct: dct[path[0]] = {}
xset(dct[path[0]], path[1:], val)
def xget(dct, path):
if len(path) == 1:
return dct[path[0]]
else:
return xget(dct[path[0]], path[1:])
用法:
>>> d = {}
>>> xset(d, ('a', 'b', 'c'), 6)
>>> d
{'a': {'b': {'c': 6}}}
>>> xset(d, ('a', 'b', 'd', 'e'), 12)
>>> d
{'a': {'b': {'c': 6, 'd': {'e': 12}}}}
>>> xget(d, ('a', 'b', 'c'))
6
答案 1 :(得分:0)
试试这个:
item = {}
for i in reversed(path):
tmp = {**item}
item ={}
item[i] = {**tmp} if path.index(i)!=len(path)-1 else 'somevalue'