Dictionary- und Listen-Bearbeitung

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
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Hallo Leute,

ich bin ganz neu in Python-Welt. Ich habe eine grosse Liste, die aus mehreren Dictionaries besteht. z.B: L = [{"a1":"1", "b1":"23"},{"a1":"112", "b1":"2wws"}, ..... ]

ich will diese Liste bearbeiten und eine neue dict() erstellen, die folgendermassen aussehen sollte:

L_Neu = {"a1":["1","112",....], "b1":["23","2wws",...]}

kann mir Jemand weiterhelfen?!
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

machs einfach. dein ansatz?
...meh...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

koukoun hat geschrieben:kann mir Jemand weiterhelfen?!
Hi koukoun!

Willkommen im Python-Forum!

Das hier könnte ein Lösungsansatz für dich sein:

Code: Alles auswählen

mylist = [
    {"a1":"1", "b1":"23"},
    {"a1":"112", "b1":"2wws"}, 
    {"a1":"113", "b1":"3wws"}, 
]

new_dict = {}

for listitem in mylist:
    for key, value in listitem.items():
        valuelist = new_dict.setdefault(key, [])
        valuelist.append(value)
Ich verwende die Methoden ``items()`` und ``setdefault()`` des Dictionary-Objekts. Siehe: http://docs.python.org/lib/typesmapping.html

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Hallo Gerold,

danke fuer deine Unterstuezung. Wenn ich mit "values" arbeite:

Code: Alles auswählen

mylist = [ 
    {"a1":"1", "b1":"23"}, 
    {"a1":"112", "b1":"2wws"}, 
    {"a1":"113", "b1":"3wws"}, 
] 

new_dict = {} 

for listitem in mylist: 
    for value in listitem.items(): 
        valuelist = new_dict.setdefault(key, []) 
        valuelist.append(value)
bekomme ich eine Liste, die aus Items besteht aber in diesem Form:
valuelist=[('a1','1'), ('b1','23'), ('a1','112'), ('b1','2wws'), ('a1','113'), ('b1','3wws')]

Was ich gern haben moechte ist wie gesagt eine dict die folgendermassen aussehen sollte:

valuelist={"a1":["1", "112", "113"], "b1":["23", "2wws", "3wws"]}

ich hab schon paar mal ausprobiert, aber irgendwie klappt das nicht. mir ist die Python seit paar Tagen bekannt, aber irgendwie muss ich es packen.

Wenn du eine Idee haettest, waere sehr dankbar dafuer.

Danke noch mal

Edit by Gerold: Code in Code-Tags gestellt
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Vergleiche mal Gerolds Code mit deinem, bei dir scheint eine kleine Feinheit zu fehlen :wink:
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Code: Alles auswählen

J:\Dokumente und Einstellungen\Gerold\Desktop\Neuer Ordner>diff a.py b.py
10c10
<     for key, value in listitem.items():
---
>     for value in listitem.items():

J:\Dokumente und Einstellungen\Gerold\Desktop\Neuer Ordner>
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

:)
Hallo Jogurt....hast du es probiert? bei mir klappt irgendwie nicht...ich drehe durch :cry:
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Hallo Gerold,

nach dem ich das Ganze korriegiert habe, bekomme ich in valuelist = ['23', '2wws', '3wws'] ..das heisst die Werte von "b1".

Wie soll ich eine andere Liste erstellen, die die Werte von "a1" beinhaltet?!

Danke
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Schau mal auf den Post von Gerold, vor dir. Du hast in Zeile 10

Code: Alles auswählen

    for value in listitem.items(): 
anstatt

Code: Alles auswählen

    for key, value in listitem.items(): 
Also bei mir geht es wunderbärchen *g*


MfG EnTeQuAk

€dit: da war einer schneller *g*.

nach dem ich das Ganze korriegiert habe, bekomme ich in valuelist = ['23', '2wws', '3wws'] ..das heisst die Werte von "b1".

Wie soll ich eine andere Liste erstellen, die die Werte von "a1" beinhaltet?!
Warum? Du müsstest folgenden Output bekommen:

Code: Alles auswählen

>>> 
{'a1': ['1', '112', '113'], 'b1': ['23', '2wws', '3wws']}
Ist zumindest bei mir so. Wenn bei dir nicht, poste doch bitte nochmal deinen Code.
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

Danke EnTeQuAk

also mein Code lautet:
mylist = [{"a1":"1", "b1":"23"},{"a1":"112", "b1":"2wws"}, {"a1":"113", "b1":"3wws"}]

new_dict = {}
for listitem in mylist:
for key, value in listitem.items():
valuelist=new_dict.setdefault(key, [])
valuelist.append(value)
print valuelist

>>> ['23', '2wws', '3wws']
BlackJack

Du solltest vielleicht mal `new_dict` ausgeben und nicht `valuelist`. :-)
koukoun
User
Beiträge: 27
Registriert: Freitag 27. April 2007, 15:55

BlackJack hat geschrieben:Du solltest vielleicht mal `new_dict` ausgeben und nicht `valuelist`. :-)
Danke BlackJack....oh jeh!! das ist so eine Schande.!! ich bin nicht dadrauf gekommen...
Vielen Dank noch mal..
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Wollte ich grad sagen *g*

Code: Alles auswählen

>> mylist = [{"a1":"1", "b1":"23"},
...     {"a1":"112", "b1":"2wws"},
...     {"a1":"113", "b1": "3wws"}]
>>> new_dict = {}
>>> for listitem in mylist:
...     for key, value in listitem.items():
...             valuelist=new_dict.setdefault(key, [])
...             valuelist.append(value)
...
>>> print new_dict
{'a1': ['1', '112', '113'], 'b1': ['23', '2wws', '3wws']}
Und btw: füge doch bitte um deinen Code

Code: Alles auswählen

[code=py]#dein code
[/code]
Tags ein!

MFG EnTeQuAk
Antworten