2017-03-08 4 views
0

Ich arbeite an einem einfachen Parser, wo Reihenfolge/Index von Bedeutung ist. Jeder Eintrag hat jedoch viele Null-Werte. Um Platz zu sparen, möchte ich sie daher entfernen. Um die Reihenfolge/Index-Informationen zu erhalten, versuche ich ein Wörterbuch in einem Wörterbuch zu erstellen, in dem der Schlüssel des inneren Wörterbuchs der "Schlüssel des äußeren Wörterbuchs + der Index" ist.Erstellen eines Wörterbuchs aus einem Wörterbuch als iterable

Es begann als eine lange Kette:

'Blue|periwinkle|power|morning|cyan\nPurple|indigo|violet|royal|electric\nred|rogue|mauve|wine|magenta\nyellow|gold|amber|flax|mustard' 

Also öffnete ich die Datei in Python und brach auseinander, um die Zeichenfolge wie folgt:

with open('example1.hl7', 'r') as message: 
    for i,line in enumerate(message): 
     line = line.split('|', 1) 
     linekey = line[0] 
     line = {linekey + str(i + 1): line[1]} 
     line = {key: list(map(str, value.split('|'))) for key, value in line.items()} 

Was mich dies gab:

{'Blue': ['periwinkle', 'power', 'morning', 'cyan'], 
'Purple': ['indigo', 'violet', 'royal', 'electric'], 
'red': ['rogue', 'mauve', 'wine', 'magenta'], 
'yellow': ['gold', 'amber', 'flax', 'mustard']} 

Ich denke, ich muss map() für den nächsten Teil verwenden, aber kann nicht herausfinden, welche Funktion zu korrektem Formular aufrufen im Wörterbuch und wie man den äußeren Schlüssel referenziert. Ich habe den äußeren Schlüssel benannt, um den Aufruf zu erleichtern, aber ich bleibe immer noch dabei, den Index hinzuzufügen und ihn zum Schlüssel für das innere Wörterbuch zu machen. Was ich versuche zu enden ist:

{'Blue': 
    {'Blue1': 'periwinkle', 'Blue2': 'power', 'Blue3': 'morning', 'Blue4': 'cyan'}, 
'Purple': 
    {'Purple1': 'indigo', 'Purple2': 'violet', 'Purple3': 'royal', 'Purple4': 'electric'}, 
'Red': 
    {'Red1': 'rogue', 'Red2': 'mauve', 'Red3': 'wine', 'Red4': 'magenta'}, 
'Yellow': 
    {'Yellow1': 'gold', 'Yellow2': 'amber', 'Yellow3': 'flax', 'Yellow4': 'mustard'} 
} 

Antwort

0

Versuchen Sie dies.
Ich legte die lange Zeichenfolge in der Datei example1.hl7.

outer_dict = {} 

with open('example1.hl7', 'r') as _file: 
    line = _file.read() 

for i in line.strip().split('\n'): 
    values = i.split('|') 
    outer_key = values[0] 
    outer_dict[outer_key] = {"{}{}".format(outer_key, index+1): j 
          for index, j in enumerate(values[1:])} 
print outer_dict 

(Hinweis: die lange Zeichenfolge Format wird sich nicht ändern Unter der Annahme)

Verwandte Themen