webentwicklung-frage-antwort-db.com.de

diktieren nach Wert Python

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?

70
kingRauk

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

150
John La Rooy

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']
34
jamylak

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])
15
njzk2

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]
7
kingRauk

Werte sortieren:

sorted(data.values())

kehrt zurück

['a','b']
7
eumiro

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.

4
Morgan Wilde

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)
1
Christian Long

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 ('=======================')
0
xiyurui

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'}

0
Marius