[英]List of dictionaries, in a dictionary - in Python
我有一種情況,我需要以編程方式構造以下結構(是的,我知道.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 = ????
...
上面的代碼顯然不起作用,因為我不知道該怎么做!
例如,您發布的不是有效的python代碼,我只能想象您正在嘗試執行以下操作:
self.rules[a] = [{b:{'f_expr': c, 'c_expr': d}}]
這樣, self.rules
是字典的字典列表的字典。 我敢打賭,還有更明智的方法可以做到這一點。
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”,因為您從不提及從何處獲得這些信息,但我認為它們已經知道某種結果集或某種結構中的列名。
只要繼續添加結構即可。
您的示例代碼似乎不是有效的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'}}
我最喜歡的處理嵌套詞典和詞典列表的方法是使用PyYAML 。 有關詳細信息,請參見此響應 。
好吧,我為此感到抱歉,我從未聲稱代碼實際上已經過編譯,因此(偽)。 亞瑟·托馬斯(Arthur Thomas)使我走上了正確的軌道,這里是經過稍微修改的版本。 (是的,現在它是一個簡單的嵌套字典,向下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]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.