2009-05-06 4 views
1

В списке можно добавить список. Но как я достигаю добавления в словаре?Список словарей

Symbols from __ctype_tab.o: 
Name     Value Class  Type   Size  Line Section 
__ctype    |00000000| D |   OBJECT|00000004|  |.data 
__ctype_tab   |00000000| r |   OBJECT|00000101|  |.rodata 

Symbols from _ashldi3.o: 
Name     Value Class  Type   Size  Line Section 
__ashldi3   |00000000| T |    FUNC|00000050|  |.text 

Symbols from _ashrdi3.o: 
Name     Value Class  Type   Size  Line Section 
__ashrdi3   |00000000| T |    FUNC|00000058|  |.text 

Symbols from _fixdfdi.o: 
Name     Value Class  Type   Size  Line Section 
__fixdfdi   |00000000| T |    FUNC|0000004c|  |.text 
__fixunsdfdi  |  | U |   NOTYPE|  |  |*UND* 

Как я могу создать словарь, как:

dictOfTables {'__ctype_tab.o':{'__ctype': Name:...,Value:...,Class:...,Type:...,Size:...,Line:...,Section:...}} etc. 

для вышеприведенного текста?

ответ

1

Изучите использование ordered dictionary. Я не думаю, что это уже на официальном Python, но есть эталонная реализация, доступная в PEP.

7

Приложение не имеет смысла для концепции словаря так же, как и для списка. Вместо этого, более разумно говорить в терминах вставки и удаления ключа/значений, так как нет «конец», чтобы добавить к - диктовка неупорядочена.

От нужного выхода, похоже, что вы хотите иметь Dict из dicts в dicts (т.е. {filename : { symbol : { key:value }} я думаю, что вы можете получить это от вашего входа что-то вроде этого:.

import re 

header_re = re.compile('Symbols from (.*):') 

def read_syms(f): 
    """Read list of symbols from provided iterator and return dict of values""" 
    d = {} 
    headings=None 
    for line in f: 
     line = line.strip() 
     if not line: return d # Finished. 

     if headings is None: 
      headings = [x.strip() for x in line.split()] 
      continue # First line is headings 

     items = [x.strip() for x in line.split("|")] 
     d[items[0]] = dict(zip(headings[1:], items[1:])) 
    return d 

f=open('input.txt') 
d={} 
for line in f: 
    m=header_re.match(line) 
    if m: 
     d[m.group(1)] = read_syms(f) 
+0

Окончательный Dict будет выглядеть так: {'_ashrdi3.o': {'__ashrdi3': {'Section': '.text', 'Value': '00000000', 'Line': '', 'Type': 'FUNC ',' Class ':' T ',' Size ':' 00000058 '}}, ' _ashldi3.o ': {' __ashldi3 ': {' Section ':' .text ',' Value ':' 00000000 ',' 'Line': '', 'Type': 'FUNC', 'Class': 'T', 'Size': '00000050'}}, '_fixdfdi.o': {'__fixdfdi': {'Section': '.text', 'Value': '00000000', 'Line': '', 'Type': 'FUNC', 'Class': 'T', 'Size': '0000004c'}, '__fixunsdfdi': {'Section': '* UND *', 'Value' : '', 'Line': '', 'Type': 'NOTYPE', 'Class': 'U', 'Size': ''}}} – flight

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