2015-02-09 5 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, например (с помощью квадратных скобок, чтобы выбрать ключ словаря, а точка для требуемое значение вне скобок) знать значение bP_2, для A_3 в R_2 от KEY_1, или ['ID_FILE']['KEY_1'].R_2 и получить список ['A_1', 'A_2' , 'A_3'], то есть выбрать ключи Словаря, указывая, в конце концов, нужную информацию, чтобы получить конечный результат ...

структуры является довольно сложной, но концепция обобщению, и я бы понял, по какому методу, модулю python или лучшему подходу, я могу добиться этого в python; если это было бы предпочтительнее, чтобы начать с внешней стороны или изнутри, организовывать и объединять словари в уникальный большой словарь ...

Edit 1: То есть, использовать значение предыдущего ключа в качестве ключа для нового дополнительный словарь.

Редактировать 2: Исходный файл - это файл CIF, такой как this (это большой файл с 170925 строками). Учитывая, что СИФ файл, я анализируя линии, начиная с 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 

Так, например, чтобы получить координаты х (столбец 10) атома N (колонка 3) остатка 271 (столбец 8) цепи A (столбец 6), дайте такую ​​команду ['4tvx'] ['A'] ['271'] ['N']. CoordX

+0

Это не может быть объяснено с помощью * меньшего набора данных образца *? –

+2

Правильно отредактируйте ваш вопрос. Мне стало скучно видеть это. – bluefoggy

+0

Поиск атрибута типа 'd [ID_FILE] [KEY_1] [R_2] [A_3] [P_2]' не будет работать со всеми этими промежуточными списками (при условии, что эти имена представляют строки). –

ответ

0

Благодаря Стивен 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_FILE] [Key_1] [R_2] [A_3] [P_2] .b

+0

Это скорее подходит как комментарий, чем как ответ. –

Смежные вопросы