Wie zu Sortieren Wörterbuch auf erstes element des Schlüssels (Tupel)
Ich habe ein Wörterbuch, wo jeder Schlüssel ist ein Tupel von Werten, die ich verwenden möchten, die sorted()
- Methode Sortieren Sie das Wörterbuch auf das erste element meiner Tupel. Mein code sieht wie folgt aus:
def mapData(header_list, dict_obj):
master_dict = {}
client_section_list = []
for element in header_list:
for row in dict_obj:
if (row['PEOPLE_ID'], row['DON_DATE']) == element:
client_section_list.append(row)
element = list(element)
element_list = [client_section_list[0]['DEDUCT_AMT'],
client_section_list[0]['ND_AMT'],
client_section_list[0]['DEDUCT_YTD'],
client_section_list[0]['NONDEDUCT_YTD']
]
try:
element_list.append((float(client_section_list[0]['DEDUCT_YTD']) +
float(client_section_list[0]['NONDEDUCT_YTD'])
))
except ValueError:
pass
element.extend(element_list)
element = tuple(element)
master_dict[element] = client_section_list
client_section_list = []
return sorted(master_dict, key=lambda key: key[master_dict[(1)]]
Die Letzte Zeile ist, wo ich versuche einen Weg zu finden, zu Sortieren. Mein Tupel wie folgt aussieht:
(312178078,6/22/15,25,0,25,0,25.0)
- Was ist falsch mit dem code, den Sie haben?
- Wenn die Schlüssel-Tupeln, als der dict sortiert werden, indem das erste element dieser Tupel standardmäßig. Aber wenn Sie benötigen, um eine Schlüssel-Funktion, versuchen Sie
lambda key: key[0]
. Schließlich ist zu beachten, dasssorted(some_dict)
zurückkehren wird nur die Schlüssel in sortierter Reihenfolge, nicht die gesamte dict, d.h. Sie verlieren die Werte! - Sie wollen zu verwenden
dict.items()
imsorted
Funktion, wenn Ihr Ziel ist es, dass die gesamte dictionary-Struktur.return sorted(master_dict.items(), key=lambda key: key[0][0])
sollte das tun, was Sie wollen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht ganz sicher, was Sie versuchen zu tun, insbesondere, was die Funktion zurückgeben sollte. Ich gehe davon aus, dass Sie zurückkehren möchten, in das Wörterbuch sortiert nach dem ersten element in der Schlüssel-Tupel.
Für dieses Problem gibt es zwei Dinge zu beachten:
OrderedDict
stattEinige minimal-Beispiel:
In Ihrem Fall, werden Sie wahrscheinlich wollen, dies:
Als @tobias_k erwähnt hat,
sorted
möglichen Tupel, indem Sie seine Elemente mit Abnehmender Priorität, z.B. wenn Sie ein Tupel(a, b, c)
der höchsten sortierpriorität gehta
, dann gehtb
etc (standardmäßigsorted
verwendet Objekt-ist-Vergleich Methoden und dies ist, wietuple
Vergleich funktioniert). Sosorted(master_dict)
ist aller, den Sie benötigen, wenn Sie möchten, eine Liste mit den sortierten Schlüssel, doch ich glaube, Sie wirklich wollen, lassen Sie die Wertedict.items
gibt Tupeln der form(key, value)
so, hier müssen Sie die Sortierungkey
.dict.items()
wird, wird es auch Sortieren, indem Sie das erste element in dem Tupel standardmäßig, d.h. ohne Angabe eines key-Funktion, dict-Einträge, wie((k1, k2, ...), (v1, v2, ...))
werden sortiert nach k1, dann k2, ..., dann durch v1, v2, .... etc.key
Funktion in derdict.items
Teilkey
ist ein Tupel, alslambda key: key[0]
ist die gleiche wie die Standard-Sortierung, außer, dass es kein tie-breaking bei dem ersten element in der gleichen (dies kann aber nie der Fall eh nicht, da die Schlüssel eindeutig sind).