[PYTHON] Wertesortierung eines Wörterbuchs mit einer komplizierten Struktur (Sortierung nach Schlüsselstruktur nach tiefem Wert)

Es wird auch als komplexe Wertsortierung bezeichnet (welche Sortierung ist das?)

--Fall, in dem der Wert des angegebenen Wörterbuchs eine Struktur hat

Zum Beispiel gibt es eine solche Wörterbuchstruktur

Adic = {
↓ Hier oder ↓ Ich möchte hier sortieren
            'C134':{"price":30,"sales":"1000","profit":200 ,"alist":[110,20,30 ,50]}, 
            'C623':{"price":80,"sales":"100" ,"profit":6   ,"alist":[100,10,30 ,50]},
            'C430':{"price":70,"sales":"5000","profit":1000,"alist":[160,11,120,6]},
            'C115':{"price":10,"sales":"2400","profit":40  ,"alist":[80 , 1,10 ,6]}
        }

Der Punkt ist der Ausdruck des Rückgabewerts des Lambda-Ausdrucks

Geben Sie mit sorted () den Wert an, den Sie in der Wertestruktur sortieren möchten (in diesem Fall ist x [1] der innere Wörterbuchtyp).  key = lambda x: x[1]['profit']

Müssen folgen, wenn der Wert, den Sie angeben möchten, tiefer ist (x [1] ['alist'] entspricht der Liste, geben Sie die zweite an)  key = lambda x: x[1]['alist'][1]

Grundsätzlich das

dic = {'A':10000, 'B':2010, 'C':5, 'D':500} res = sortiert (dic.items (), key = lambda x: x [1]) #Wertangabe res = sortiert (pathD.items (), key = lambda x: int (x [0])) # Geben Sie übrigens die Sortierung nach Schlüssel an, wenn key str ist

Lambda kann gelesen werden, wenn Sie es als Abkürzung für eine Funktion betrachten.

def lambda(x): return 2x --> lambda x:2x

Beim Diktattyp springt der Taple (Schlüssel, Wert) in x, sodass 0 oder 1 angegeben wird.

import collections
from prettyprint import pp, pp_str #pp ist dein Favorit, also habe bitte kürzlich einen offiziellen
from collections import OrderedDict

Adic = {
            #Sortieren Sie diese 4 Spalten nach Wert Wert irgendwo im Wert
            'C134':{"price":30,"sales":"1000","profit":200 ,"alist":[110,20,30,50]}, 
            'C623':{"price":80,"sales":"100" ,"profit":6   ,"alist":[100,10,30,50]},
            'C430':{"price":70,"sales":"5000","profit":1000,"alist":[160,11,120,6]},
            'C115':{"price":10,"sales":"2400","profit":40  ,"alist":[80,1,10,6]}
        }

#Es fühlt sich an, als wäre x ein Taple aus dem Wörterbuch. Geben Sie den Wert an, indem Sie ihn durch den Taple ziehen
#Beachten Sie, dass es in List zurückgegeben wird
#Alle absteigende Reihenfolge Bezeichnung:reverse=True
pp('Nach Gewinn sortieren')
res1 = sorted(Adic.items(), key=lambda x: x[1]['profit'],reverse=True)
pp(res1)

pp('Nach Verkäufen sortieren (Zeichenfolge in int konvertiert)')
res2 = sorted(Adic.items(), key=lambda x: int(x[1]['sales']),reverse=True)
pp(res2)

pp('Nach der zweiten Liste sortieren')
res3 = sorted(Adic.items(), key=lambda x: x[1]['alist'][1],reverse=True)
pp(res3)

pp('Schlüsselsortierung (Ziehen Sie die Nummer mit 3 von hinten heraus. Wenn 3 Ziffern oder fest)')
res4 = sorted(Adic.items(), key=lambda x: int (x[0][-3]) ,reverse=True)#Irgendwie auch ohne int
pp(res4)

pp('Schlüsselsortierung (erstes Zeichen"C"Schnitt)')
res5 = sorted(Adic.items(), key=lambda x: int(x[0].lstrip('C')) ,reverse=True)
pp(res5)

pp('Nach Gewinn sortieren 2')
res6 = OrderedDict(sorted(Adic.items(), key=lambda x: x[1]['profit'],reverse=True))
print(res6)#Wenn es pp ist, wird die Reihenfolge unterbrochen.
pp(type(res6))

Ergebnis

Ich werde vorerst nur den Gewinnfall einfügen. Die Gewinnwerte 1000, 200, 40, 6 können in absteigender Reihenfolge nach Struktur sortiert werden! In Bezug auf den Schlüssel ist die strukturelle Ordnung c430, c134, c115, c623.

"Nach Gewinn sortieren"
[
    [
        "C430", 
        {
            "alist": [
                160, 
                11, 
                120, 
                6
            ], 
            "price": 70, 
            "profit": 1000, 
            "sales": "5000"
        }
    ], 
    [
        "C134", 
        {
            "alist": [
                110, 
                20, 
                30, 
                50
            ], 
            "price": 30, 
            "profit": 200, 
            "sales": "1000"
        }
    ], 
    [
        "C115", 
        {
            "alist": [
                80, 
                1, 
                10, 
                6
            ], 
            "price": 10, 
            "profit": 40, 
            "sales": "2400"
        }
    ], 
    [
        "C623", 
        {
            "alist": [
                100, 
                10, 
                30, 
                50
            ], 
            "price": 80, 
            "profit": 6, 
            "sales": "100"
        }
    ]
]



#Bemerkungen
#Beziehung zwischen Lambda-Ausdrücken und -Funktionen
def func(x):
    return x ** 2

func = lambda x: x ** 2
func(2) #4

#String-Verarbeitung
string.strip()#Löschen Sie alle Zeilenumbrüche
string.strip("\n\r")#Treffer an beiden Enden löschen
string.rstrip("\n\r")#Löschen Sie, was mit einem Ketsu trifft

Recommended Posts

Wertesortierung eines Wörterbuchs mit einer komplizierten Struktur (Sortierung nach Schlüsselstruktur nach tiefem Wert)
Sortieren nach dikt Typ Wert Wert
Die Art des Tupel-Arrays kann durch Angabe des Schlüssels (Python) beschleunigt werden.
Erweiterung des Python-Wörterbuchs um Argumente
Ersetzen Sie den Wörterbuchwert durch Python> update ()
Versuchen Sie mit Kipoi tiefes Erlernen der Genomik
Wörterbuchschlüsselfehler → Mit Schlüssel in dicionary beheben
Emotionale Analyse von Tweets mit Deep Learning
Suchen Sie den Pythonondict-Wörterbuchschlüssel nach regulären Ausdrücken
[https Proxy mit Tintenfisch] Beheben Sie den Fehler, der mit einem zu kleinen Dh-Schlüssel aufgetreten ist