Seite 1 von 1

Dictionary- und Listen-Bearbeitung

Verfasst: Freitag 27. April 2007, 16:28
von koukoun
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?!

Verfasst: Freitag 27. April 2007, 16:47
von cracki
machs einfach. dein ansatz?

Re: Dictionary- und Listen-Bearbeitung

Verfasst: Freitag 27. April 2007, 20:59
von gerold
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
:-)

Danke

Verfasst: Dienstag 1. Mai 2007, 11:46
von koukoun
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

Verfasst: Dienstag 1. Mai 2007, 11:49
von Joghurt
Vergleiche mal Gerolds Code mit deinem, bei dir scheint eine kleine Feinheit zu fehlen :wink:

Verfasst: Dienstag 1. Mai 2007, 12:10
von gerold

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

Verfasst: Mittwoch 2. Mai 2007, 11:28
von koukoun
:)
Hallo Jogurt....hast du es probiert? bei mir klappt irgendwie nicht...ich drehe durch :cry:

Verfasst: Mittwoch 2. Mai 2007, 11:32
von koukoun
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

Verfasst: Mittwoch 2. Mai 2007, 11:35
von EnTeQuAk
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.

Verfasst: Mittwoch 2. Mai 2007, 11:46
von koukoun
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']

Verfasst: Mittwoch 2. Mai 2007, 12:18
von BlackJack
Du solltest vielleicht mal `new_dict` ausgeben und nicht `valuelist`. :-)

Verfasst: Mittwoch 2. Mai 2007, 12:24
von koukoun
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..

Verfasst: Mittwoch 2. Mai 2007, 12:26
von EnTeQuAk
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