Seite 1 von 1

Werte aus Dictionary auslesen

Verfasst: Dienstag 6. März 2012, 09:03
von recnice
Hallo,

ich habe folgendes Problem:

in einem File möchte ich folgende Einträge generieren:

readFSI 1 pandas_press_bc_5_step_1_cycle_12.dat
readFSI 2 pandas_press_bc_7_step_1_cycle_12.dat
readFSI 3 pandas_press_bc_9_step_1_cycle_12.dat

Die Information welches readFSI zu welchem bc gehört is in dem dict surf_number = {'FSI_surf1':'5','FSI_surf2':'7','FSI_surf3':'9'}
gespeichert.

Mein Problem ist, wie kann ich eine Schleife über die Einträge machen, also 3 mal readFSI und dass er für z.B. den ersten Eintrag die 5 aus
dem dict surf_number ausliest.

Mein bisheriges Programm sieht so aus:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#06.03.2012
from string import Template

bc    = 500
time  = 1000
cycle = 90

#-----------------------------------------------------------------------
TEMPLATE_II = '''
readFSI ${fsi_bound} pandas_press_bc_${bc_no}_step_${end_time}_cycle_${cycle_no}
'''
#String ----->  Template
Temp_readFSI = Template(TEMPLATE_II)
#-----------------------------------------------------------------------

surf_number = {'FSI_surf1':'5','FSI_surf2':'7','FSI_surf3':'9'}
print surf_number

for x in range(len(surf_number)):
   replace={'fsi_bound':x+1,'bc_no': surf_number.get('FSI_surf'+x),'end_time':time,'cycle_no':cycle}
   print(Temp_readFSI.substitute(replace))
Hat jemand eine Idee, ich steh komplett auf dem schlauch :K

Re: Werte aus Dictionary auslesen

Verfasst: Dienstag 6. März 2012, 09:08
von BlackJack
@recnice: Überleg doch mal was die Ausnahme bedeutet, die Du da bekommst.

Re: Werte aus Dictionary auslesen

Verfasst: Dienstag 6. März 2012, 09:11
von mutetella
Guten morgen,

lies mal die Dokumentation zu dict. Dort findest Du unter anderem 'items()', welches Dir zu Deinem dict eine Liste mit (key, value) Paaren liefert:

Code: Alles auswählen

for key, item in surf_number.items():
    print key, item
     
FSI_surf2 7
FSI_surf3 9
FSI_surf1 5
mutetella

Re: Werte aus Dictionary auslesen

Verfasst: Dienstag 6. März 2012, 09:11
von Hyperion
Du musst das ganze Problem präziser darstellen!

Du postest Code, zeigst / sagst aber nicht, was daran nicht klappt oder was dabei herauskommt und was Du stattdessen erwartet hättest.
recnice hat geschrieben: Mein Problem ist, wie kann ich eine Schleife über die Einträge machen, also 3 mal readFSI und dass er für z.B. den ersten Eintrag die 5 aus
dem dict surf_number ausliest.
Stelle doch mal bitte den Zusammenhang zwischen den Datenstrukturen besser dar! Was willst Du erreichen? Aufgrund welcher Daten willst Du im Dictionary auf etwas zugreifen?

Re: Werte aus Dictionary auslesen

Verfasst: Dienstag 6. März 2012, 10:10
von cofi
@mutetella:
Daran hab ich zuerst auch gedacht, wenn man aber die richtig sortierte Reihenfolge will, muss man mehr tun:

Code: Alles auswählen

In [16]: import re

In [17]: d = {'FSI_surf1' : '5', 'FSI_surf11': '6', 'FSI_surf2': '7'}

In [18]: for k in sorted(d, key=lambda k: map(int, re.findall(r'\d+', k))):
    print k, d[k]
   ....:     
FSI_surf1 5
FSI_surf2 7
FSI_surf11 6
Und das am besten noch mit Fehlerbehandlung. Der Ursprungscode ist allerdings tatsaechlich grausam.

Re: Werte aus Dictionary auslesen

Verfasst: Dienstag 6. März 2012, 10:25
von recnice
Na ja, so grausam ist er nicht. Jetzt funktioniert's :lol: :

Code: Alles auswählen

for x in range(len(surf_number)):
		print surf_number.get('FSI_surf'+str(x+1))
		replace={'fsi_bound':x+1,'bc_no': surf_number.get('FSI_surf'+str(x+1)),'end_time':t_end,'cycle_no':CYCLE}
		cmd.write(Temp_readFSI.substitute(replace))
Ausgabe:
  • readFSI 1 pandas_press_bc_5_step_0.05_cycle_1

    readFSI 2 pandas_press_bc_7_step_0.05_cycle_1

    readFSI 3 pandas_press_bc_9_step_0.05_cycle_1

Re: Werte aus Dictionary auslesen

Verfasst: Dienstag 6. März 2012, 10:27
von mutetella
@cofi:
Stimmt, im Beispiel von recnice sieht es danach aus, als wolle er/sie ein sortiertes Ergebnis.

In dem Fall würde ich mir aber dann überlegen, ob die Konstante 'FSI_surf' denn überhaupt im key stehen muss oder hier ein

Code: Alles auswählen

In [20]: FSI_surf = ((3, 9), (2, 7), (1, 5))

In [21]: sorted(FSI_surf)
Out[21]: [(1, 5), (2, 7), (3, 9)]
generell mehr Sinn machen würde.

mutetella