2016-06-13 11 views
0

Ich habe mehrere NetCDF-Dateien mit den gleichen Variablen. Ich möchte mehrere Datendateien einlesen und alle Daten in einem riesigen Wörterbuch speichern. Das Problem mit meinem Code ist, dass ich das neue Wörterbuch anhängen kann, aber ich kann nicht mehr die Elemente innerhalb des Wörterbuchs trennen. Zum Beispiel:Python Appending Wörterbuch in Loop

def parseFile(file_name): 
    ret_dict = {} 
    with Dataset(file_name,'r') as fid: 
     ret_dict['time'] = list(fid.variables['time'][:]) 

Wenn ich diese Funktion für eine Datendatei aufrufen, könnte ich habe:

>>> ret_dict['time'] 
[1,2,3,4] 

für die zweite Datei, könnte ich erwarten:

>>> ret_dict['time'] 
[5,6,7,8] 

Innerhalb einer Schleife Ich möchte ein anderes Wörterbuch mit allen Werten erstellen:

>>> new_dict['time'] 
[1,2,3,4,5,6,7,8] 

Hier ist, was ich versucht habe:

new_dict = {} 
for f in file_name: 
    ret_dict = parseFile(f) 
    new_dict.setdefault('time',[]).append(ret_dict['time']) 

Dies ergibt:

>>> new_dict['time'] 
[[1,2,3,4],[5,6,7,8]] 

und

>>> new_dict['time'][0] 
[1,2,3,4] 

Ich möchte:

>>> new_dict['time'][0] 
[1] 

Ich dachte über new_dict Anfügen in eine Schleife, howe ver, die Datendateien sind groß, und das dauert eine Weile. Gibt es einen schnelleren Weg, Wörterbücher anzuhängen, während gleichzeitig auf die einzelnen Werte zugegriffen werden kann?

Antwort

1

Ihr Problem besteht darin, dass Sie Listen an eine Liste anhängen und eine verschachtelte Liste erstellen, die nicht Ihren Vorstellungen entspricht.

>>> ls = [] 
>>> ls.append([1, 2, 3]) 
>>> ls 
[[1, 2, 3]] 
>>> ls[0] 
[1, 2, 3] 

Es gibt jedoch eine andere Methode, um Elemente zu einer Liste hinzuzufügen. Es .extend

>>> ls = [] 
>>> ls.extend([1, 2, 3]) 
>>> ls 
[1, 2, 3] 
>>> ls[0] 
1 

verwenden aufgerufen, wenn Sie die Liste sind das Hinzufügen wie so:

new_dict = {} 
for f in file_name: 
    ret_dict = parseFile(f) 
    new_dict.set_default('time',[]).extend(ret_dict['time']) 

Dies würde die erwartete Liste erzeugen, die Sie können leicht Index

By the way, Ihren Code wird nicht funktionieren, weil es keine solche Methode wie set_default definiert für dicts gibt. Du meinst wahrscheinlich setdefault, was macht was du willst.