Ausgabe
Ich habe eine Liste in Python3, die aus mehreren Unterlisten besteht, jede mit einer Zeichenfolge, einer zählenden Ganzzahl und einem Tupel:
final =[ ['auto', 3, [1066, 1238, 1700]],
['conta', 3, [1286, 1495, 1550]],
['multidisciplinar', 3, [1301, 1428, 1451]],
['intradisciplinar', 3, [1302, 1508, 1559]],
['variações', 3, [1314, 1426, 1937]],
['alegoria', 3, [1339, 1376, 1630]],
['orquestra', 3, [1351, 1370, 1394]],
['exemplo', 3, [1372, 1741, 2092]],
['natureza', 3, [1480, 1533, 1737]],
['procedimentos', 3, [1552, 1782, 2008]],
['tema', 3, [1577, 1647, 1696]],
['acadêmico', 2, [3, 397]],
['adquirido', 2, [15, 850]],
['científico', 2, [22, 1764]],
['área', 2, [32, 1400]],
['facilmente', 2, [44, 496]],
['antigüidade', 2, [1837, 1885]],
['através', 2, [1853, 1880]],
['primeiros', 2, [1856, 1891]],
['complexidade', 2, [1869, 1943]],
['partir', 2, [1915, 2051]],
['elemento', 2, [1917, 1938]],
['água', 2, [1925, 1966]],
['ar', 2, [1926, 1965]],
['fogo', 2, [1928, 1967]],
['coisa', 2, [2029, 2038]],
['poderiam', 2, [2048, 2086]],
['diferenças', 2, [2059, 2078]],
['entrou', 1, [1]],
['vocabulário', 1, [2]],
['usual', 1, [4]],
['timida', 1, [5]],
['mente', 1, [6]],
['tateando', 1, [7]] ]
Wie Sie alle sehen können, ordnet diese Liste die Zeichenfolgen (erstes Element), zählt ihre Häufigkeit von höher nach niedriger (zweites Element) und zählt auch die Position, an der das Zeichenfolgenelement erscheint (drittes Element, das Tupel). Basierend darauf muss ich weitere vier verschiedene Listen generieren, die diese Unterlisten enthalten, dh mit der gleichen Struktur, aber mit den Elementen wie folgt geordnet:
Eine erste Liste, in der die Zeichenfolgen (erstes Element) unter Berücksichtigung ihrer Häufigkeit (zweites Element) und des niedrigsten Werts für das erste Element im Tupel (drittes Element) absteigend geordnet sind. Dies bezeichnet eine höhere Frequenz und eine niedrigere Ordnung der Saite. Bereits zur Verfügung gestellt.
Eine zweite Liste, in der die Zeichenfolgen (erstes Element) unter Berücksichtigung ihrer Häufigkeit (zweites Element) und des höchsten Werts für das erste Element im Tupel (drittes Element) absteigend geordnet sind. Dies bezeichnet eine höhere Frequenz und höhere Ordnung der Saite.
Eine dritte Liste, in der die Zeichenfolgen (erstes Element) unter Berücksichtigung ihrer Häufigkeit (zweites Element) und des niedrigsten Werts für das erste Element im Tupel (drittes Element) zunehmend geordnet sind. Dies bezeichnet eine niedrigere Frequenz und niedrigere Ordnung der Saite.
Eine vierte Liste, in der die Zeichenfolgen (erstes Element) unter Berücksichtigung ihrer Häufigkeit (zweites Element) und des höchsten Werts für das erste Element im Tupel (drittes Element) zunehmend geordnet sind. Dies bezeichnet eine niedrigere Frequenz und eine höhere Ordnung der Saite.
Erste Liste – höhere Frequenz und niedrigere Ordnung.
Zweite Liste – höhere Frequenz und höhere Ordnung.
Dritte Liste – niedrigere Frequenz und niedrigere Ordnung.
Vierte Liste – niedrigere Frequenz und höhere Ordnung.
Alle Überlegungen zur Reihenfolge der Elemente in den Tupeln gelten nur für die Tupel, die mehr als ein Element haben.
Ich spüre mit Nachdruck, dass es möglich ist, aber ich habe alle Ansätze ausprobiert, die Listen, Indizes, Pandas und Wörterbücher verwenden, die ich verstehe, und ich kann immer noch nicht herausfinden, wie es geht. Danke im Voraus.
Lösung
Sie können Ihre Liste mithilfe von Lambda-Funktionen für jedes Artikelattribut sortieren, nach dem sortiert werden soll. Die Verwendung des Reverse-Flags sortiert vom höchsten zum niedrigsten. Um also Ihre vierte Liste zu erstellen;
sorted(sorted(final, key=lambda x: x[2][0], reverse=True), key = lambda x: x[1])
Bearbeiten:
Wenn Sie keinen leichten Hack machen, können Sie einen sortierten Aufruf verwenden – in diesem Fall erfolgt die Sortierung vom kleinsten zum größten, aber um es umzukehren, können Sie das Suchkriterium zum negierten Wert machen. Die vierte Liste wäre also wieder;
sorted(final, key=lambda x: (x[1], -x[2][0]))
Beantwortet von – bn_ln
Antwort geprüft von – Timothy Miller (FixError Admin)