Angenommen, ich habe ein Dikt.
data = {1:'b', 2:'a'}
Und ich möchte die Daten nach 'b' und 'a' sortieren, damit ich das Ergebnis bekomme
'a','b'
Wie mache ich das?
Irgendwelche Ideen?
Um die Werte zu erhalten, verwenden Sie
sorted(data.values())
Um die passenden Schlüssel zu erhalten, verwenden Sie eine key
-Funktion
sorted(data, key=data.get)
Um eine Liste von Tupeln nach Wert zu erhalten
sorted(data.items(), key=lambda x:x[1])
Verwandte: siehe die Diskussion hier: Wörterbücher sind in Python 3.6+ geordnet
Wenn Sie das Wörterbuch tatsächlich sortieren möchten, anstatt nur eine sortierte Liste zu erhalten, verwenden Sie collections.OrderedDict
>>> from collections import OrderedDict
>>> from operator import itemgetter
>>> data = {1: 'b', 2: 'a'}
>>> d = OrderedDict(sorted(data.items(), key=itemgetter(1)))
>>> d
OrderedDict([(2, 'a'), (1, 'b')])
>>> d.values()
['a', 'b']
Von Ihrem Kommentar zur Antwort von gnibbler würde ich sagen, dass Sie eine Liste von Schlüsselwertpaaren nach Wert sortieren möchten:
sorted(data.items(), key=lambda x:x[1])
Danke für alle Antworten ... Sie sind alle meine Helden ;-)
Hatte am Ende so etwas:
d = sorted(data, key = d.get)
for id in d:
text = data[id]
Werte sortieren:
sorted(data.values())
kehrt zurück
['a','b']
Ich denke auch, dass es wichtig ist zu beachten, dass der Objekttyp Python dict
eine Hash-Tabelle ist ( mehr dazu hier ) und daher nicht sortiert werden kann, ohne seine Schlüssel/Werte in Listen zu konvertieren. Dies ermöglicht dict
Elementabruf in konstanter Zeit O(1)
, unabhängig von der Größe/Anzahl der Elemente in einem Wörterbuch.
Nachdem Sie jedoch die Schlüssel sortiert haben - sorted(data.keys())
- oder Werte - sorted(data.values())
, können Sie diese Liste dann verwenden, um auf Schlüssel/Werte in Entwurfsmustern wie diesen zuzugreifen:
for sortedKey in sorted(dictionary):
print dictionary[sortedKeY] # gives the values sorted by key
for sortedValue in sorted(dictionary.values()):
print sortedValue # gives the values sorted by value
Hoffe das hilft.
In Ihrem Kommentar als Antwort auf John schlagen Sie vor, dass Sie die Schlüssel und Werte des Wörterbuchs und nicht nur die Werte verwenden möchten.
PEP 256 schlägt dies vor, um ein Wörterbuch nach Werten zu sortieren.
import operator
sorted(d.iteritems(), key=operator.itemgetter(1))
Wenn Sie eine absteigende Reihenfolge wünschen, tun Sie dies
sorted(d.iteritems(), key=itemgetter(1), reverse=True)
keine Lambda-Methode
# sort dictionary by value
d = {'a1': 'fsdfds', 'g5': 'aa3432ff', 'ca':'zz23432'}
def getkeybyvalue(d,i):
for k, v in d.items():
if v == i:
return (k)
sortvaluelist = sorted(d.values())
sortresult ={}
for i1 in sortvaluelist:
key = getkeybyvalue(d,i1)
sortresult[key] = i1
print ('=====sort by value=====')
print (sortresult)
print ('=======================')
Sie können aus Values eine sortierte Liste erstellen und das Wörterbuch neu erstellen:
myDictionary={"two":"2", "one":"1", "five":"5", "1four":"4"}
newDictionary={}
sortedList=sorted(myDictionary.values())
for sortedKey in sortedList:
for key, value in myDictionary.items():
if value==sortedKey:
newDictionary[key]=value
Ausgabe: newDictionary = {'one': '1', 'two': '2', '1four': '4', 'five': '5'}