簡體   English   中英

如何在示例中編輯 python dict?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM