我有一个案例需要构建以下结构以编程方式(是的我知道.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 = ????
...
上面的代码显然不起作用,因为我不知道该怎么做!
答案 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)
我最喜欢的处理嵌套字典的方法&字典列表是使用PyYAML。 See 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]