2009-05-06 7 views
1

In einer Liste ist das Anhängen möglich. Aber wie erreiche ich das Anhängen im Wörterbuch?Ein Wörterbuch auflisten

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* 

Wie kann ich ein Wörterbuch wie zu erstellen:

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

für den oben stehenden Text?

Antwort

1

Schauen Sie sich mit einem ordered dictionary. Ich denke nicht, dass dies im offiziellen Python ist, aber es gibt eine Referenzimplementierung, die im PEP verfügbar ist.

7

Das Anhängen macht für das Dictionary-Konzept keinen Sinn wie für die Liste. Stattdessen ist es sinnvoller, in Bezug auf das Einfügen und Entfernen von Schlüsseln/Werten zu sprechen, da es keine "Ende" -Anhänge gibt - das Diktat ist ungeordnet.

Von Ihrer gewünschten Ausgabe, es sieht aus wie Sie ein dict von dicts von dicts haben wollen, (dh {filename : { symbol : { key:value }} Ich glaube, Sie diese von Ihrem Eingang mit so etwas wie diesem bekommen.

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

Der letzten dict würde so aussehen: {'_ashrdi3.o': {'__ashrdi3': {'Sektion': '.text', 'Wert': '00000000', 'Linie': '', 'Typ': 'FUNC ',' Klasse ':' T ',' Größe ':' 00000058 '}}, ' _ashdi3.o ': {' __ashdi3 ': {' Abschnitt ':' .text ',' Wert ':' 00000000 ', 'Linie': '', 'Typ': 'FUNC', 'Klasse': 'T', 'Größe': '00000050'}}, '_fixdfdi.o': {'__fixdfdi': {'Sektion': '.text', 'Wert': '00000000', 'Zeile': '', 'Typ': 'FUNC', 'Klasse': 'T', 'Größe': '0000004c'}, '__fixunsdfdi': {'Abschnitt': '* UND *', 'Wert' : '', 'Linie': '', 'Typ': 'NOTYPE', 'Klasse': 'U', 'Größe': ''}}} – flight