Jak seřadit pythonovský slovník podle klíče nebo hodnoty

V tomto tutoriálu se naučíte, jak třídit pythonovský slovník podle jeho klíče nebo hodnoty.

Když pracujete se slovníkem v Pythonu, jsou chvíle, kdy budete muset seřadit jeho obsah – podle klíče nebo podle hodnoty. Protože slovník Pythonu je mapování klíč-hodnota, vytvoříte nový slovník, který bude mít klíče nebo hodnoty seřazené podle potřeby.

V tomto tutoriálu začneme opakováním základů slovníku Python. Poté se naučíme vytvářet nový slovník, ve kterém je obsah řazen podle klíče nebo podle hodnoty.

Základy slovníku Python, znovu navštíveno

Co je to slovník Pythonu?

Slovník je vestavěná datová struktura v Pythonu. Ukládá položky jako páry klíč–hodnota. Pomocí kláves můžete vyhledat odpovídající hodnoty. Protože klíče jednoznačně identifikují hodnoty, nemělo by docházet k žádnému opakování klíčů.

py_dict = {"Python":"cool!","Learn":True}
py_dict["Python"]
# Output: cool!

py_dict["Learn"]
# Output: True

Funkčně je slovník podobný hash mapě. Nejedná se tedy nutně o uspořádanou datovou strukturu. K obsahu slovníku můžete přistupovat v libovolném pořadí, pokud znáte klíče.

Řazení položek ve slovníku

V dřívějších verzích Pythonu jste museli použít an OrderedDict pro zachování pořadí kláves. Od Pythonu 3.7 však můžete přistupovat k položkám ve stejném pořadí, v jakém je přidáváte do slovníku.

Nyní, když jste se naučili základy slovníků Pythonu, pojďme se naučit, jak vytvářet setříděné kopie slovníku.

⚙️ Poznámka: Aby kód v tomto tutoriálu fungoval podle očekávání, musíte mít Python 3.7 nebo novější. Můžete si stáhnout nejnovější verzi Pythonunebo spusťte příklady v etechblog.cz Online Python Editoru.

  Jak se připojit k síti WiFi pomocí WPS na Androidu

Jak seřadit pythonovský slovník podle klíče

Podívejte se na následující obrázek dezertního menu v kavárně. Položkám v nabídce a jejich příslušným cenám odpovídají dva sloupce.

Můžete to reprezentovat ve formě slovníku Pythonu shromažďováním názvů položek jako klíčů a jejich cen jako hodnot.

Pojďme do toho a vytvořte slovníkové dezerty, jak je uvedeno níže.

desserts = {
    "Ice cream":10,
    "Brownies":12,
    "Cheesecake":3,
    "Swiss roll":5,
    "Cookies":4,
    "Cup cake":2
}

Dále si vytvoříme slovník sorted_desserts, kde jsou dezerty seřazeny podle abecedy. V originálním slovníku dezertů jsou klíčem názvy dezertů. Takže byste měli seřadit tyto klíče v abecedním pořadí, abyste vytvořili nový slovník.

Jak získat přístup ke klíčům slovníku Python

K tomu nejprve získáme klíče slovníku a poté je seřadíme v abecedním pořadí.

V Pythonu můžete použít vestavěnou slovníkovou metodu .keys() k získání seznamu všech klíčů ve slovníku.

Zavolejte metodu .keys() ve slovníku dezertů, abyste získali klíče, jak je znázorněno níže.

keys = desserts.keys()
print(keys)

#Output
['Ice cream', 'Brownies', 'Cheesecake', 'Swiss roll', 'Cookies', 
'Cup cake']

Volání vestavěné funkce sort() Pythonu se seznamem jako argumentem vrátí nový seřazený seznam.

Dále zavolejme funkci sorted() s klíči seznamu jako argumentem a uložme setříděný seznam do proměnné sorted_keys.

sorted_keys = sorted(keys)
print(sorted_keys)

# Output
['Brownies', 'Cheesecake', 'Cookies', 'Cup cake', 'Ice cream', 'Swiss roll']

Nyní, když máme klíče seřazené v abecedním pořadí, můžeme vyhledat hodnoty odpovídající klíčům v sort_keys ze slovníku dezertů, jak je ukázáno níže.

sorted_desserts = {}
for key in sorted_keys:
  sorted_desserts[key] = desserts[key]

print(sorted_desserts)

# Output
{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Rozbalíme výše uvedený blok kódu:

  • Inicializujte sort_desserts, aby byl prázdným slovníkem Pythonu.
  • Procházejte seznam klíčů sorted_keys.
  • Pro každý klíč v sorted_keys přidejte položku do sorted_desserts vyhledáním odpovídající hodnoty ve slovníku dezertů.
  Jak najít archivované e-maily v Gmailu

Použití cyklu for takto je považováno za podrobné. V Pythonu existuje stručnější alternativa využívající porozumění slovníku.

Porozumění slovníku v Pythonu

Python podporuje použití porozumění slovníku, podobně jako porozumění seznamu. Porozumění slovníku vám umožní vytvořit nový slovník Pythonu pouze s jedním řádkem kódu.

▶️ Zde je obecný konstrukt pro použití porozumění slovníku v Pythonu.

# 1. when you have both keys and values in two lists: list1, list2
new_dict = {key:value for key,value in zip(list1,list2)}

# 2. when you have the keys, and can look up the values
new_dict = {key:value for key in <iterable>}

Použijme druhý konstrukt ve výše uvedené buňce: new_dict = {key:value for key in } k vytvoření slovníku sorted_desserts.

V tomto příkladu:

  • iterovatelný: seznam seřazených_klíčů
  • key: klíč, ke kterému přistupujeme procházením přes sorted_keys
  • hodnota: vyhledejte hodnotu odpovídající klíči ze slovníku dezertů, dezerty[key]

Když to dáme dohromady, máme výraz pro porozumění slovníku, jak je uvedeno níže.

sorted_desserts = {key:desserts[key] for key in sorted_keys}
print(sorted_desserts)

{'Brownies': 12, 'Cheesecake': 3, 'Cookies': 4, 'Cup cake': 2, 
'Ice cream': 10, 'Swiss roll': 5}

Z výše uvedeného výstupu jsou dezerty seřazeny v abecedním pořadí ve slovníku sorted_desserts.

Jak seřadit pythonovský slovník podle hodnoty

Dále se naučíme, jak třídit pythonovský slovník podle jeho hodnot.

Ve slovníku zákusků hodnoty odpovídají cenám zákusků. Možná budete chtít seřadit slovník podle cen, buď ve vzestupném nebo sestupném pořadí.

▶️ K získání všech párů klíč–hodnota můžete použít vestavěnou slovníkovou metodu .items(). Každá n-tice je pár klíč–hodnota.

desserts.items()

dict_items([('Ice cream', 10), ('Brownies', 12), ('Cheesecake', 3), 
('Swiss roll', 5), ('Cookies', 4), ('Cup cake', 2)])

Každá z položek je sama o sobě n-tice. Můžete tedy také indexovat do každého páru klíč–hodnota a přistupovat ke klíčům a hodnotám jednotlivě.

dict_items = desserts.items()
for item in dict_items:
  print(f"key:{item[0]},value:{item[1]}")

# Output
key:Ice cream,value:10
key:Brownies,value:12
key:Cheesecake,value:3
key:Swiss roll,value:5
key:Cookies,value:4
key:Cup cake,value:2

Protože bychom chtěli třídit podle hodnot, použijeme výše uvedenou metodu k získání hodnoty na indexu 1 v páru klíč-hodnota.

  Jak používat Microsoft Teams

Jak seřadit hodnoty slovníku Python ve rostoucím pořadí

Tentokrát použijeme funkci sort() spolu s volitelným parametrem key. klíč může být jakákoli funkce Pythonu, vestavěná funkce, uživatelsky definovaná funkce nebo dokonce a funkce lambda.

Poznámka: lambda args: expression je syntaxí pro definování funkcí lambda v Pythonu.

V tomto příkladu řazení dezertů podle ceny máme přístup k položkám slovníku (párům klíč-hodnota). Nastavíme klíč = lambda item:item[1] jak bychom chtěli seřadit podle hodnoty (ceny).

Protože funkce sort() ve výchozím nastavení vrací seznam, měli byste jej explicitně přehodit do diktátu, jak je uvedeno níže.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1]))
print(sorted_desserts)

{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

Můžete také přepsat pomocí porozumění slovníkujak bylo diskutováno dříve.

sorted_desserts = {key:value for key, value in sorted(desserts.items(), 
key=lambda item:item[1])}

print(sorted_desserts)

# Output
{'Cup cake': 2, 'Cheesecake': 3, 'Cookies': 4, 'Swiss roll': 5, 
'Ice cream': 10, 'Brownies': 12}

V sort_desserts je Cup Cake s cenou 2 $ první položkou a Brownies za 12 $ je poslední položkou.

Jak seřadit hodnoty slovníku Python v sestupném pořadí

Pokud chcete seřadit ceny v sestupném pořadí, můžete nastavit volitelný reverzní parametr na True, jak je vysvětleno níže.

sorted_desserts = dict(sorted(desserts.items(), key=lambda item:item[1], 
reverse=True))
print(sorted_desserts)

# Output
{'Brownies': 12, 'Ice cream': 10, 'Swiss roll': 5, 'Cookies': 4, 
'Cheesecake': 3, 'Cup cake': 2}

Nyní byly seřazené_dezerty seřazeny v sestupném pořadí podle cen, počínaje nejdražším dezertem Brownies za 12 dolarů.

Zabalení 👩🏽‍💻

Pojďme rychle shrnout vše, co jsme se v tomto tutoriálu naučili.

  • Slovník Pythonu ukládá data v párech klíč-hodnota; všechny klíče by měly být jedinečné.
  • V procesu řazení slovníku podle klíče nebo hodnoty vytváříme nový slovník, který se třídí podle potřeby.
  • K načtení všech klíčů a párů klíč-hodnota můžete použít vestavěné slovníkové metody, .keys() a .items().
  • K dosažení požadovaného řazení můžete použít funkci sort() spolu s klávesou volitelných parametrů a obráceně.

Nyní, když jste se naučili třídit slovník Pythonu, naučte se třídit seznamy Pythonu. Veselé kódování!🎉