簡體   English   中英

字典中的字典列表-Python

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

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