2015-02-09 233 views
-1

我想能夠從文件中訪問數據,將它們組織成一個我認爲應該是字典列表字典的結構,從我的理解,可能如下所示:Python字典的字典列表

ID_FILE = { 
     'KEY_1': [ 
        { 
         'R_1': [ 
           { 
            'A_1': [ 
              { 
               'P_1': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_2': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_3': ['a', 'b', 'c', 'd'] 
              } 
             ], 
            'A_2': [ 
              { 
               'P_1': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_2': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_3': ['a', 'b', 'c', 'd'] 
              } 
             ], 
            'A_3': [ 
              { 
               'P_1': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_2': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_3': ['a', 'b', 'c', 'd'] 
              } 
             ] 
           } 
          ], 
         'R_2': [ 
           { 
            'A_1': [ 
              { 
               'P_1': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_2': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_3': ['a', 'b', 'c', 'd'] 
              } 
             ], 
            'A_2': [ 
              { 
               'P_1': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_2': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_3': ['a', 'b', 'c', 'd'] 
              } 
             ], 
            'A_3': [ 
              { 
               'P_1': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_2': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_3': ['a', 'b', 'c', 'd'] 
              } 
             ] 
           } 
         ], 
         'R_3': [ 
           { 
            'A_1': [ 
              { 
               'P_1': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_2': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_3': ['a', 'b', 'c', 'd'] 
              } 
             ], 
            'A_2': [ 
              { 
               'P_1': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_2': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_3': ['a', 'b', 'c', 'd'] 
              } 
             ], 
            'A_3': [ 
              { 
               'P_1': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_2': ['a', 'b', 'c', 'd'] 
              }, 
              { 
               'P_3': ['a', 'b', 'c', 'd'] 
              } 
             ] 
           } 
         ] 
        } 
       ], 

     'KEY_2': [...as 'KEY_1'...], 

     'KEY_3': [...as 'KEY_1'...] 
    } 

,我不知道是否是理想的正確,但在實踐中,我將能夠使用一個命令來訪問字典的數據,如['ID_FILE']['KEY_1']['R_2']['A_3']['P_2'].b,例如(用方括號來選擇字典的關鍵,併爲一個點想要的數值在括號內)知道b的值P_2鍵,A_3R_2KEY_1,或['ID_FILE']['KEY_1'].R_2並獲得一個列表['A_1', 'A_2' , 'A_3'],即選擇字典的鍵,在最後指示所需的信息,以獲得最終輸出...

結構相當複雜,但概念是可概括的,我會明白通過什麼方法,python模塊或最好的辦法,我可以在Python中實現這一點;如果從外部或從內部開始優選將詞典組織並連接成獨特的大詞典...

編輯1:也就是說,使用前一個鍵的值作爲新的鍵子字典。

編輯2:源文件是一個CIF文件,如this(它是一個包含170925行的大文件)。考慮到CIF文件,我的解析開始的行ATOM,將它們分成列:

KEY = column 6 
R = column 8 
A = column 3 
P = Atom row = list of columns 
a = column 1 
b = column 2 
c = column 3 
d = column 4 

因此,舉例來說,要獲得殘基的x座標的原子N(柱10)(第3欄) 271(第8欄)的鏈A(第6列),給出這樣的命令['4tvx'] ['A'] ['271'] ['N']。coordX

+0

這不能用一個*小樣本數據集*解釋? – 2015-02-09 16:27:15

+2

請正確編輯您的問題。看到它我感到無聊。 – bluefoggy 2015-02-09 16:28:43

+0

像'd [ID_FILE] [KEY_1] [R_2] [A_3] [P_2]'這樣的屬性查找不適用於所有這些中間列表(假設這些名稱代表字符串)。 – 2015-02-09 16:29:40

回答

0

感謝Steven Rumbalski向我表明該工具,PyCifRW,但回答我的話題問題,需要的結構是字典詞典,以實現那個gool:

r_list = ['20', '21'] 
dictionary = {} 
r_dict = {} 
a_dict = {} 
for r in range(0,len(r_list)): 
    r = r_list[r] 
    dictionary['C'] = r_dict 
    r_dict[r] = a_dict 

print dictionary 
print dictionary['C'] 

"""output: 

{'C': {'20': {}, '21': {}}} 
{'20': {}, '21': {}} 

equal to: 

dictionary = {'C': { 
        '20': {}, 
        '21': {} 
       } 
      } 
""" 
0

看起來你的模式不理想(儘管在不瞭解您存儲的內容的情況下很難說清楚)。從查看您的數據,KEY_1,R_1和A_1應該是字典而不是列表。通過簡化您的結構,您將使用[ID_1] [KEY_1] [R_2] [A_3] [P_2] .b

+0

這比作爲回答更適合作爲評論。 – 2015-02-09 16:53:19