2017-10-14 4 views
2

Ich habe dieses Programm:Wie erstelle ich Wörterbuchdaten in einer Liste?

def file(fname): 
    lines = open(fname).read().splitlines() 
    return(lines) 
print(file('venue.txt')) 

Und es kam wie diese heraus, welche ich in die Liste ändern:

['room 1, 10, 250'] 

Wie kann ich eine Wörterbuchdaten mit ihm bauen, so dass es so sein kann :

[{'name': 'room 1', 'max': 10, 'cost': 250}] 

Einige Anhaltspunkte vielleicht für mich, es zu bauen. Dank

Editiert:

def file(fname): 
    lines = open(fname).read().splitlines() 
    new = [] 
    for i in lines: 
     split = i.split(', ') 
     new.append({'name':split[0],'max':split[1],'cost':split[2]}) 
    return(new) 
print(file('venue.txt')) 

Er druckt:

new.append({'name':split[0],'max':split[1],'cost':split[2]}) 
IndexError: list index out of range 

Was ist das?

Antwort

1

Sie können dies versuchen:

import re 
def file(fname): 
    lines = open(fname).read().splitlines() 
    return(lines) 
headers = ["name", "max", "cost"] 
data1 = [re.split(",\s+", i) for i in file("venue.txt")] 
final_data = [{a:b for a, b in zip(headers, data} for data in data1] 
print(final_data) 
+0

nichts kam heraus –

+0

@Joehan müssen Sie 'final_data' drucken. Bitte sehen Sie meine letzte Änderung. – Ajax1234

+0

ja..es funktioniert..danke ... aber es druckt nur eine Daten ... wie wäre es, wenn es mehr als eins ist ..... data = re.split (", \ s +", Datei ("Venue .txt ") [0]) ... ich ändere den Wert 0 in eine andere Zahl, es druckt auch die anderen Daten ... wie bekomme ich alle Daten auf einmal drucken? ... Danke ... Entschuldigung wenn Ich frage zu viel @ Ajax1234 –

1

Wenn sie durch ', ' getrennt sind, können Sie die split() auf ', ' verwenden. Gibt ein Array mit den getrennten Elementen zurück.

Für Ihr Beispiel:

current_list = ['room 1, 10, 250'] 
split = current_list[0].split(', ') 
new_list = [{'name': split[0], 'max': int(split[1]), 'cost': int(split[2])}] 
print(new_list) 

Ausgang:

[{'name': 'room 1', 'max': 10, 'cost': 250}] 

Für eine größere Liste:

current_list = ['room 1, 10, 250', 'room 2, 30, 500','room 3, 50, 850'] 
new_list = [] 
for i in current_list: 
    split = i.split(', ') 
    new_list.append({'name': split[0], 'max': int(split[1]), 'cost': int(split[2])}) 

print(new_list) 

Ausgang:

[{'name': 'room 1', 'max': 10, 'cost': 250}, {'name': 'room 2', 'max': 30, 'cost': 500}, {'name': 'room 3', 'max': 50, 'cost': 850}] 
+1

Verwenden 'int (split [1])' und 'int (split [2])' diejenigen auf ganze Zahlen zu konvertieren. – smarx

Verwandte Themen