2009-05-06 5 views
1

Dans une liste, l'ajout est possible. Mais comment j'atteins l'ajout dans le dictionnaire?Liste un dictionnaire

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* 

Comment puis-je créer un dictionnaire comme:

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

pour le texte ci-dessus?

Répondre

1

Regardez dans l'utilisation d'un ordered dictionary. Je ne pense pas que ce soit dans Python officiel pour le moment, mais il y a une implémentation de référence disponible dans le PEP.

7

L'ajout n'a pas de sens pour le concept de dictionnaire de la même manière que pour la liste. Au lieu de cela, il est plus judicieux de parler en termes d'insertion et de suppression des clés/valeurs, car il n'y a pas de "end" pour ajouter - la dict est non ordonnée.

A partir de votre sortie désirée, il semble que vous voulez avoir un dict de dicts de dicts, (c.-à-{filename : { symbol : { key:value }} Je pense que vous pouvez obtenir ce à partir de votre entrée avec quelque chose comme ceci:.

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

La dict finale ressemblerait à ceci: {'_ashrdi3.o': {'Section': '.text', 'Valeur': '00000000', 'Ligne': '', 'Type': 'FUNC ',' Class ':' T ',' Size ':' 00000058 '}}, ' _ashldi3.o ': {' Section ':' .text ',' Valeur ':' 00000000 ', 'Ligne': '', 'Type': 'FUNC', 'Classe': 'T', 'Taille': '00000050'}}, '_fixdfdi.o': {'__fixdfdi': {'Section': '.text', 'Value': '00000000', 'Ligne': '', 'Type': 'FUNC', 'Classe': 'T', 'Taille': '0000004c'}, '__fixunsdfdi': {'Section': '* UND *', 'Valeur' : '', 'Ligne': '', 'Type': 'NOTYPE', 'Classe': 'U', 'Taille': ''}}} – flight

Questions connexes