Dict sortieren nach...
Dict sortieren nach...
hallo!
hab ein dict mit werten wie {"wort_als_string":"anzahl_des_worter_als_string").
nun wäre es toll, wenn das dict nach der anzahl der wörter sortiert würde; also nach inhalt des feldes nr2...
danke für Eure hilfe
hab ein dict mit werten wie {"wort_als_string":"anzahl_des_worter_als_string").
nun wäre es toll, wenn das dict nach der anzahl der wörter sortiert würde; also nach inhalt des feldes nr2...
danke für Eure hilfe
Du kannst ein dict nicht sortieren, weil es intern als Hash gespeichert wird (google wird dir da helfen).
Stell es dir wie eine Mathematische Menge vor: Es gibt nirgends iInformationen über die Reihenfolge.
Du kannst aber z.B. eine Liste aus allesn Schlüsseln machen und diese sortieren:
Stell es dir wie eine Mathematische Menge vor: Es gibt nirgends iInformationen über die Reihenfolge.
Du kannst aber z.B. eine Liste aus allesn Schlüsseln machen und diese sortieren:
Code: Alles auswählen
sorted_keys = sorted(mein_dict.keys())
for k in sorted keys:
print "Wort:", k, "Anzahl:", mein_dict[k]
Hallo Gast,
die Ausgabe, sortiert nach den dict-Werten, ist so möglich:
Gruss Helmut
Edit (Leonidas): Code in Python-Tags gesetzt.
die Ausgabe, sortiert nach den dict-Werten, ist so möglich:
Code: Alles auswählen
zahlen = {'1':'eins',
'2':'zwei',
'3':'drei',
'4':'vier',
'5':'fuenf'}
#Schluessel und Werte vertauschen
r_zahlen={}
for k in zahlen.keys():
r_zahlen[zahlen[k]]=k
v_list = zahlen.values()
v_list.sort()
#Ausgabe der Werte, sortiert in alphabetischer Reihenfolge der Werte
for v in v_list:
print r_zahlen[v], v
Gruss Helmut
Edit (Leonidas): Code in Python-Tags gesetzt.
Eine Liste von Tuplen wäre vieleicht hilfreicher als ein Dictionary:
Edit (Leonidas): Code in Python-Tags gesetzt.
Code: Alles auswählen
counted = { 'red': 12, 'green': 9, 'blue': 17 }
def by_count (a, b):
if counted[a] < counted[b]:
return -1
elif counted[a] == counted[b]:
return 0
else:
return 1
L = counted.keys
L.sort(cmp=by_count)
ordered = [(k, counted[k]) for k in L ]
Edit (Leonidas): Code in Python-Tags gesetzt.
Oder nochmal etwas schöner:
Code: Alles auswählen
counted = { 'red': 12, 'green': 9, 'blue': 17 }
L = counted.items()
def by_second(j):
return j[1]
L.sort(key=by_second)
helmut hat geschrieben:Code: Alles auswählen
#Schluessel und Werte vertauschen
r_zahlen={}
for k in zahlen.keys():
r_zahlen[zahlen[k]]=k
Das funktioniert aber nur wenn die Werte auch alle eindeutig sind. ich1988 hatte im Beispiel aber ein Dictionary mit Worten und Anzahlen. Der Satz "Python ist cool" würde dann zu:
Code: Alles auswählen
histogram = { 'Python': 1, 'cool': 1, 'ist': 1 }
Das Dictionary lässt sich schlecht umdrehen.
Zu Ronnies Lösung: `by_second` kann man durch `operator.itemgetter(1)` ersetzen.
mit python 2.5
gehts auch so
gehts auch so
Code: Alles auswählen
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': '672800', 'Adj Close': '8.82', 'High': '8.94', 'Low': '8.65', 'Date': '2008-04-17', 'Close': '8.82', 'Open': '8.89'},
{'Volume': '485000', 'Adj Close': '8.89', 'High': '8.94', 'Low': '8.78', 'Date': '2008-04-18', 'Close': '8.89', 'Open': '8.90'},
{'Volume': '753300', 'Adj Close': '8.81', 'High': '8.81', 'Low': '8.51', 'Date': '2008-04-16', 'Close': '8.81', 'Open': '8.63'}]
sortiert_daten = sorted(data, key=lambda x: x['Date'])
print 'Ergebniss'
print sortiert_daten
main()
Code: Alles auswählen
import operator
data.sort(key=operator.itemgetter("Date"))
EyDu hat geschrieben:Code: Alles auswählen
import operator
data.sort(key=operator.itemgetter("Date"))
wo liegt der vorteil wenn ich dazu ein modul brauche
desweiteren
keine funktion
mit deinem code
meiner ausgeklammert funzt
Code: Alles auswählen
import operator
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': '672800', 'Adj Close': '8.82', 'High': '8.94', 'Low': '8.65', 'Date': '2008-04-17', 'Close': '8.82', 'Open': '8.89'},
{'Volume': '485000', 'Adj Close': '8.89', 'High': '8.94', 'Low': '8.78', 'Date': '2008-04-18', 'Close': '8.89', 'Open': '8.90'},
{'Volume': '753300', 'Adj Close': '8.81', 'High': '8.81', 'Low': '8.51', 'Date': '2008-04-16', 'Close': '8.81', 'Open': '8.63'}]
#sortiert_daten = sorted(data, key=lambda x: x['Date'])
sortiert_daten = data.sort(key=operator.itemgetter("Date"))
print 'Ergebniss'
print sortiert_daten
main()
sea-live hat geschrieben:keine funktion
mit deinem code
meiner ausgeklammert funzt
`sort` sortiert ja auch *IN PLACE*. Folglich wird `data` direkt verändert und es wird `None` zurückgegeben. Du müsstest also ``print data`` machen oder ``sortiert_daten = sorted(data, key=operator.itemgetter("Date"))``
Edit: Vergessene Klammer hinzugefügt.
Zuletzt geändert von Trundle am Montag 28. April 2008, 21:09, insgesamt 1-mal geändert.
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder