listen übergeben [] -> ()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

servus hab da mal wieder ein problem

warum bekomm ich kein ergebniss in die listen


Code: Alles auswählen

import csv
# Einlesen der daten  csv )
data = [{'Volume': '1285500', 'Adj Close': '9.84', 'High': '10.18', 'Low': '9.70', 'Date': '2008-04-25', 'Close': '9.84', 'Open': '9.74'},
 {'Volume': '1121700', 'Adj Close': '9.67', 'High': '9.70', 'Low': '9.36', 'Date': '2008-04-24', 'Close': '9.67', 'Open': '9.45'},
 {'Volume': '1513700', 'Adj Close': '9.41', 'High': '9.45', 'Low': '8.95', 'Date': '2008-04-23', 'Close': '9.41', 'Open': '8.98'},
 {'Volume': '601800', 'Adj Close': '9.03', 'High': '9.09', 'Low': '8.87', 'Date': '2008-04-22', 'Close': '9.03', 'Open': '8.90'},
 {'Volume': '481100', 'Adj Close': '8.87', 'High': '8.99', 'Low': '8.82', 'Date': '2008-04-21', 'Close': '8.87', 'Open': '8.95'},
 {'Volume': '485000', 'Adj Close': '8.89', 'High': '8.94', 'Low': '8.78', 'Date': '2008-04-18', 'Close': '8.89', 'Open': '8.90'},
 {'Volume': '672800', 'Adj Close': '8.82', 'High': '8.94', 'Low': '8.65', 'Date': '2008-04-17', 'Close': '8.82', 'Open': '8.89'},
 {'Volume': '753300', 'Adj Close': '8.81', 'High': '8.81', 'Low': '8.51', 'Date': '2008-04-16', 'Close': '8.81', 'Open': '8.63'}]
cord_open=()
cord_low=()
cord_high=()
cord_close=()
linien_key={'Open':cord_open,'Low':cord_low,'High':cord_high,'Close':cord_close}      

for key, value in linien_key.iteritems():
    liste=[]
    tmp=()
    print key
    for i in range(len(data)):
        tmp = (i,round(float(data[i][key]),2))
        liste.append(tmp)
    print liste    
    value = list(tuple(liste))
    #print value

print 'Ergebniss'
print cord_low

print cord_close
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Also zum einen sind tuple ja nicht veränderbar, zum anderen sehe ich (bei Deinem leicht verworrenem Code) nicht, dass Du irgend etwas in chord_low usw. reinschreibst (wobei das ja auch nicht ginge ;-) )

Also was erwartest Du genau?
BlackJack

@sea-live: Für die innere ``for``-Schleife würde ich die `enumerate()`-Funktion verwenden.

Was soll denn ``list(tuple(liste))`` bewirken?

Die letzte Zuweisung in der äusseren Schleife bindet einfach den Namen `value` an die eine Kopie von `liste`. Das hat keinen Effekt auf das Objekt was vorher an den Namen gebunden war, und noch weniger einen Effekt auf irgend welche Objekte, die noch eine Referenz auf das vorherige Objekt halten. Wenn Du `liste` in das Dictionary `linien_key` eintragen möchtest, dann musst Du das explizit tun.

`tmp` in Zeile 20 an ein leeres Tupel zu binden ist überflüssig.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

also einzel geht es

dann muss halt der code etwas länger werden 4x das gleiche

Code: Alles auswählen

liste=[]
tmp=()
for i in range(len(data)):
    tmp=(i,round(float(data[i]['Open']),2))
    liste.append(tmp)
    
cord_open=tuple(liste)
BlackJack

Wenn Du 4x das gleiche machst, dann nimm eine Schleife. Wenn es dann "nicht geht" setz Dich doch bitte mal damit auseinander wie in Python "Variablen" bzw. das binden von Namen an Objekte funktioniert. Das sind absolute Grundlagen.

Ausserdem wäre es günstiger die äussere Schleife über die Daten laufen zu lassen, wenn man alles in einem Dictionary sammelt und die innere Schleife über die Schlüssel. So braucht man dann nicht einmal die kompletten Daten auf einmal in den Speicher laden, sondern benötigt immer nur einen Datensatz.

Code: Alles auswählen

def process(keys, data):
    result = dict.fromkeys(keys, list())
    for row_number, row in enumerate(data):
        for key in keys:
            result[key].append((row_number, round(float(row[key]), 2)))
    return result


def main():
    data = [{'Volume': '1285500', 'Adj Close': '9.84', 'High': '10.18', 'Low': '9.70', 'Date': '2008-04-25', 'Close': '9.84', 'Open': '9.74'}, 
    {'Volume': '1121700', 'Adj Close': '9.67', 'High': '9.70', 'Low': '9.36', 'Date': '2008-04-24', 'Close': '9.67', 'Open': '9.45'}, 
    {'Volume': '1513700', 'Adj Close': '9.41', 'High': '9.45', 'Low': '8.95', 'Date': '2008-04-23', 'Close': '9.41', 'Open': '8.98'}, 
    {'Volume': '601800', 'Adj Close': '9.03', 'High': '9.09', 'Low': '8.87', 'Date': '2008-04-22', 'Close': '9.03', 'Open': '8.90'}, 
    {'Volume': '481100', 'Adj Close': '8.87', 'High': '8.99', 'Low': '8.82', 'Date': '2008-04-21', 'Close': '8.87', 'Open': '8.95'}, 
    {'Volume': '485000', 'Adj Close': '8.89', 'High': '8.94', 'Low': '8.78', 'Date': '2008-04-18', 'Close': '8.89', 'Open': '8.90'}, 
    {'Volume': '672800', 'Adj Close': '8.82', 'High': '8.94', 'Low': '8.65', 'Date': '2008-04-17', 'Close': '8.82', 'Open': '8.89'}, 
    {'Volume': '753300', 'Adj Close': '8.81', 'High': '8.81', 'Low': '8.51', 'Date': '2008-04-16', 'Close': '8.81', 'Open': '8.63'}] 
    
    linien_key = process(('Open', 'Low', 'High', 'Close'), data)
    print 'Ergebniss'
    print linien_key['Low']
    print linien_key['Close']
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

danke für die netten antworten
ich werde mir daraus was basteln

die daten werden aus einer datei csv komplett eingelesen
und dann in ein plot und grit übergeben

deswegen muss ein koorinaten(nummerierung) und spalte(key'open')
aufschlüsselung erfolgen

BlackJack dein Beispiel ergibt nicht die gewünschte einzel aufschlüsselung

aber ein durchlauf im process kann ja die gewünschten daten liefern und muss dann nur noch 4x aufgerufen werden
ERGEBNISS

Code: Alles auswählen

import csv
pfad = "C:\\boerse\\"
listenname = 'tecdax'
dateiname = 'aix.de'

def progress(key,data):
    liste=[]
    tmp=()
    for i in range(len(data)):
        tmp = (i,round(float(data[i][key]),2))
        liste.append(tmp)
    return liste

def main():
    # Einlesen der daten  csv )
    """
    file_in =open("%s%s\\%s.csv"%(pfad,listenname,dateiname), 'rb')
    reader =csv.DictReader(file_in)
    data = list(reader)
    file_in.close()
    """
    data = [{'Volume': '1285500', 'Adj Close': '9.84', 'High': '10.18', 'Low': '9.70', 'Date': '2008-04-25', 'Close': '9.84', 'Open': '9.74'},
     {'Volume': '1121700', 'Adj Close': '9.67', 'High': '9.70', 'Low': '9.36', 'Date': '2008-04-24', 'Close': '9.67', 'Open': '9.45'},
     {'Volume': '1513700', 'Adj Close': '9.41', 'High': '9.45', 'Low': '8.95', 'Date': '2008-04-23', 'Close': '9.41', 'Open': '8.98'},
     {'Volume': '601800', 'Adj Close': '9.03', 'High': '9.09', 'Low': '8.87', 'Date': '2008-04-22', 'Close': '9.03', 'Open': '8.90'},
     {'Volume': '481100', 'Adj Close': '8.87', 'High': '8.99', 'Low': '8.82', 'Date': '2008-04-21', 'Close': '8.87', 'Open': '8.95'},
     {'Volume': '485000', 'Adj Close': '8.89', 'High': '8.94', 'Low': '8.78', 'Date': '2008-04-18', 'Close': '8.89', 'Open': '8.90'},
     {'Volume': '672800', 'Adj Close': '8.82', 'High': '8.94', 'Low': '8.65', 'Date': '2008-04-17', 'Close': '8.82', 'Open': '8.89'},
     {'Volume': '753300', 'Adj Close': '8.81', 'High': '8.81', 'Low': '8.51', 'Date': '2008-04-16', 'Close': '8.81', 'Open': '8.63'}]
    #"""
    cord_open = tuple(progress('Open',data))
    cord_low = tuple(progress('Low',data))
    cord_high = tuple(progress('High',data))
    cord_close = tuple(progress('Close',data))

    print 'Ergebniss high'
    print cord_high

    print 'Ergebniss close'
    print cord_close

main()
BlackJack

Mein Beispiel liefert in einem Durchgang das gleiche was Deins in vier Durchgängen macht. Ich gebe ein Dictionary zurück, wo alle vier Ergebnisse drin stecken.
sea-live
User
Beiträge: 440
Registriert: Montag 18. Februar 2008, 12:24
Wohnort: RP

um eine linie zu zeichnen brauch ich aber die einzelnen tupels

es läuft und ich bin dir dankbar für den tip
Antworten