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

Dictionary- und Listen-Bearbeitung

Beitragvon koukoun » Freitag 27. April 2007, 16:28

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

Beitragvon cracki » Freitag 27. April 2007, 16:47

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

Re: Dictionary- und Listen-Bearbeitung

Beitragvon gerold » Freitag 27. April 2007, 20:59

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

Danke

Beitragvon koukoun » Dienstag 1. Mai 2007, 11:46

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
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Dienstag 1. Mai 2007, 11:49

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

Beitragvon gerold » Dienstag 1. Mai 2007, 12:10

[code=]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>[/code]
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

Beitragvon koukoun » Mittwoch 2. Mai 2007, 11:28

:)
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

Beitragvon koukoun » Mittwoch 2. Mai 2007, 11:32

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:

Beitragvon EnTeQuAk » Mittwoch 2. Mai 2007, 11:35

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

Beitragvon koukoun » Mittwoch 2. Mai 2007, 11:46

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

Beitragvon BlackJack » Mittwoch 2. Mai 2007, 12:18

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

Beitragvon koukoun » Mittwoch 2. Mai 2007, 12:24

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:

Beitragvon EnTeQuAk » Mittwoch 2. Mai 2007, 12:26

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

Wer ist online?

Mitglieder in diesem Forum: Torsten_K