[英]How edit python dict in example?
我有一個字典:
my_dict = {'some.key' : 'value'}
我想像這樣改變它:
result = {'some' : {'key' : 'value'}}
我怎么能這樣做? 我需要這個來使用字典創建嵌套類:
例子:
my_dict = {'nested.key' : 'value'}
class Nested:
key : str
class MyDict:
nested : Nested
如果您需要它來實際使用,而不是作為編碼練習,您可以安裝extradict
並使用extradict.NestedData
:
In [1]: from extradict import NestedData
In [2]: a = NestedData({'some.key' : 'value'})
In [3]: a["some"]
Out[3]: {'key': <str>}
In [4]: a["some"]["key"]
Out[4]: 'value'
In [5]: a.data
Out[5]: {'some': {'key': 'value'}}
(免責聲明:我是 package 作者)
我希望這個 function 對你有幫助
def foo(obj):
result = {}
for k, v in obj.items():
keys = k.split('.')
caret = result
for i in range(len(keys)):
curr_key = keys[i]
if i == len(keys) - 1:
caret[curr_key] = v
else:
caret.setdefault(curr_key, {})
caret = caret[curr_key]
return result
不太確定我是否理解你的問題,但會
result = {key.split('.')[0]: {key.split('.')[1]: value} for key, value in my_dict.items()}
做這個把戲?
通過遞歸,它可能看起來像這樣(讓所有鍵都唯一是必不可少的):
my_dict = {'key0' : 'value0',
'nested.key' : 'value',
'nested1.nested1.key1' : 'value1',
'nested2.nested2.nested2.key2' : 'value2'}
def func(k,v):
if not '.' in k: return {k:v}
k1,k = k.split('.',1)
return {k1:func(k,v)}
res = {}
for k,v in my_dict.items():
res.update(func(k,v))
>>> res
'''
{'key0': 'value0',
'nested': {'key': 'value'},
'nested1': {'nested1': {'key1': 'value1'}},
'nested2': {'nested2': {'nested2': {'key2': 'value2'}}}}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.