2017-11-02 5 views
0

Also ich versuche, eine Möglichkeit zu entwickeln, 4 verschiedene Kategorien (nennen wir sie A, B, C, D) in einem Wörterbuch speichern, so dass ich auf die Schlüssel/Werte in jedem Wörterbuch zugreifen kann und überprüfe sie anhand eines Dateinamens. Bis jetzt konnte ich 3 dieser Kategorien im Wörterbuch speichern, aber nicht im 4.. Die Kategorien stammen aus einer Excel-Datei und werden dann in eine normale .txt-Datei kopiert (ich habe die .txt-Datei eingefügt). Gibt es eine Möglichkeit, eine vierte Komponente zu meinem Wörterbuch hinzuzufügen?Listen verschachtelt innerhalb Wörterbuch

Link-TXT-Datei: https://drive.google.com/file/d/0B2s43FKt5BZgQldULXVOR0RBeTg/view?usp=sharing

Hier ist mein Skript:

from collections import defaultdict 
source_file = <file path>-<file name>.txt 
data_set = defaultdict(list) #sets up a defaultdict because there may be multiple overlapping keys 
s = [b for b in [i.strip('\n').split('\t') for i in open(source_file)] if b] # removes new line & tab spaces in .txt file 
for a, b, c, d in s: # a is donor, b is barcode, c is batch, d is donor 
    if a == 'Component1': # We don't want to save the column headings 
    pass 
    else: 
    data_set[a].append({b: c}) # creates the default dictionary 

die Ausgabe so ist ab dem Moment:

{'1':[{'ab':'tg'},{'dd':'dd'}],'2':{'dc':'yh'},3:{'we':'hh'}} 
+0

verwenden th e 'csv'-Modul für Tab-getrennte Dateien. – Daniel

+0

Ihre Eingabedatei hat zwei Zeilen mit einem 'Component1'-Wert von' 1'. Was möchten Sie tun, wenn dies eintritt? Wie ** sollte ** das Wörterbuch aussehen (ist es nicht wirklich wichtig, was Ihr aktueller Code ausgibt)? – martineau

Antwort

1

Sie können Ihre Spalten als Tupel gespeichert werden:

import csv 
from collections import defaultdict 
source_file = "<file path>-<file name>.txt" 
data_set = defaultdict(list) 
with open(source_file) as f: 
    lines = csv.reader(f, delimiter='\t') 
    _ = next(lines) # skip header 
    for donor, barcode, batch, donor2 in lines: 
     data_set[a].append((barcode, batch, donor2)) # save columns as tuple 
+0

Wie einfach ist es, auf die Werte innerhalb der Tupel zuzugreifen? Was ist, wenn es mehrere Daten für einen einzelnen Spender gibt? Gäbe es dann 2 Tupel für einen bestimmten Wörterbuchschlüssel? – superasiantomtom95

+0

Tupel-Elemente können per Index aufgerufen werden, und für mehrere Einträge pro Spender haben Sie die Listen mit defaultdict. – Daniel

Verwandte Themen