相关疑难解决方法(0)

给定复合键'foo.bar.baz'时,递归设置Python dict项

我想实现以下目标:

foodict['foo.bar.baz'] = 'foo'
{
   'foo': {
      'bar': {
            'baz': 'foo'
         }
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

...递归创建密钥.

抓了一会儿之后,我想出了这个:

class Config(dict):
    def __init__(self, *args, **kwargs):
        self.super = super(Config, self)
        self.update(*args, **kwargs)

    def __setitem__(self, keys, value):
        keys   = keys.split('.')
        keys.reverse()

        config = Config()

        for i, k in enumerate(keys):
            if i == 0:
                config  = Config(**{ k: value })
            else:
                config  = Config(**{ k: config })

        self.super.update(config)
Run Code Online (Sandbox Code Playgroud)

python recursion dictionary

10
推荐指数
1
解决办法
534
查看次数

将多个列表映射到字典

我有5个列表,我想将它们映射到分层字典.

让我说我有:

temp = [25, 25, 25, 25]
volt = [3.8,3.8,3.8,3.8]
chan = [1,1,6,6]
rate = [12,14,12,14]
power = [13.2,15.3,13.8,15.1]
Run Code Online (Sandbox Code Playgroud)

我想要的是我的字典是这样的:

{25:{3.8:{1:{12:13.2,14:15.3},6:{12:13.8,14:15.1}}}}
Run Code Online (Sandbox Code Playgroud)

基本上字典结构是:

{temp:{volt:{chan:{rate:power}}}}
Run Code Online (Sandbox Code Playgroud)

我尝试使用zip函数但在这种情况下它没有帮助,因为顶层列表中的重复值

python mapping dictionary list

3
推荐指数
1
解决办法
291
查看次数

Python List直接访问dict

我有一个这样的文件:

>>> 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('.')方法应用于用户输入并直接应用).

这样做的优雅方式是什么?

python

2
推荐指数
1
解决办法
110
查看次数

以编程方式访问字典中任意深度嵌套的值

我正在处理一个Python脚本,在其中给出了以下格式的字符串列表:['key1', 'key2', 'key2.key21.key211', 'key2.key22', 'key3']

列表中的每个值都对应于字典中的一个条目,对于结构类似的条目'key2.key21.key211',它们对应于(在此示例中)'key211'嵌套在其中的键'key21',自身嵌套在中'key2'

上面的列表对应于字典:

x = {
     'key1' : 'value1',
     'key2' : {
               'key21' : {
                          'key211': 'value211'
                         },
               'key22' : 'value22'
              },
     'key3' : 'value3'
    }
Run Code Online (Sandbox Code Playgroud)

名称不一定像常规一样key(n)+; food.vegetables.potato例如,它们可以是形式。我唯一可以保证的是,字典中的键名本身不包含.字符,并且字典中肯定包含原始列表中引用的所有条目。

我的问题是,给定这样的字符串列表,如何以编程方式访问字典中的相应条目?我可以想到一种使用的解决方案eval(),以及一种仅使用遍历/搜索的解决方案,但是我想避免调用eval(),并且给人的印象是,使用比较进行遍历会很慢(因为dicts不是搜索树),并且会带来很多讨厌的异常处理。

python search dictionary

1
推荐指数
1
解决办法
1008
查看次数

标签 统计

python ×4

dictionary ×3

list ×1

mapping ×1

recursion ×1

search ×1