字典列表,在字典中 - 在Python中

时间:2009-12-11 16:58:44

标签: python list dictionary nested

我有一个案例需要构建以下结构以编程方式(是的我知道.setdefault和defaultdict但我无法得到我想要的东西)

我基本上需要一个字典,在循环中创建一个字典词典。 一开始,结构完全是空白的。

结构示例(请注意,我想在代码中创建一个具有此结构的数组!)

RULE = {
     'hard_failure': {
        4514 : {
           'f_expr' = 'ABC',
           'c_expr' = 'XF0',
     }
    }
   }

需要创建此伪代码的伪代码:

...
self.rules = {}
for row in rows:
     a = 'hard_failure'
     b = row[0] # 4514
     c = row[1] # ABC
     d = row[2] # XF0
     # Universe collapse right after
     self.rules = ????
...   

上面的代码显然不起作用,因为我不知道该怎么做!

5 个答案:

答案 0 :(得分:5)

示例,您发布的不是有效的python代码,我只能想象您正尝试这样做:

self.rules[a] = [{b:{'f_expr': c, 'c_expr': d}}]

这种方式self.rules是字典列表的字典。我敢打赌,有更明智的方法可以做到这一点。

答案 1 :(得分:1)

rules = {}
failure = 'hard_failure'
rules[failure] = []
for row in rows:
  #this is what people are referring to below.  You left out the addition of the    dictionary structure to the list.
  rules[failure][row[0]] = {} 
  rules[failure][row[0]]['type 1'] = row[1]
  rules[failure][row[0]]['type 2'] = row[2]

这是我根据我对问题的理解而创建的。我不知道该怎么称为'f_expr'和'c_expr',因为你从来没有提到过你得到的那些,但我认为他们已经知道结果集或某种结构中的列名。

随时随地添加到结构中。

答案 2 :(得分:0)

您的示例代码似乎不是有效的Python。目前尚不清楚第二级元素是否应该是列表或字典。

但是,如果你正在做我认为你正在做的事情,并且它是一个字典,你可以使用元组作为顶级字典中的键而不是嵌套字典:

>>> a = 'hard_failure'
>>> b = 4514
>>> c = "ABC"
>>> d = "XF0"
>>> rules = {}
>>> rules[(a,b)] = {'f_expr' : a,'c_expr' : d}
>>> rules
{('hard_failure', 4514): {'c_expr': 'XF0', 'f_expr': 'hard_failure'}}

答案 3 :(得分:0)

我最喜欢的处理嵌套字典的方法&字典列表是使用PyYAMLSee this response for details

答案 4 :(得分:0)

好吧,我为混乱道歉,我从未声称代码实际编译,因此(伪)。亚瑟·托马斯让我走上正轨,这里是略有修改版。 (是的,现在它是一个简单的嵌套字典,3级下来)

    RULE_k = 'hard_failure'
    self.rules = {}
    for row in rows:
           self.rules_compiled.setdefault(RULE_k, {})
           self.rules_compiled[RULE_k][row[1]] = {}
           self.rules_compiled[RULE_k][row[1]]['f_expr'] = row[0]
           self.rules_compiled[RULE_k][row[1]]['c_expr'] = row[1]
相关问题