Како сортирати Питхон речник по кључу или вредности

У овом водичу ћете научити како да сортирате Питхон речник по кључу или вредности.

Када радите са речником у Питхон-у, понекад ћете морати да сортирате његов садржај — по кључу или вредности. Пошто је Питхон речник мапирање кључ-вредност, направићете нови речник који има кључеве или вредности сортиране по потреби.

У овом водичу, почећемо прегледом основа Питхон речника. Затим ћемо научити да направимо нови речник у коме је садржај сортиран по кључу или вредности, по потреби.

Основе Питхон речника, поново прегледано

Шта је Питхон речник?

Речник је уграђена структура података у Питхон-у. Ставке чува као парове кључ-вредност. Можете користити тастере да бисте потражили одговарајуће вредности. Пошто кључеви јединствено идентификују вредности, не би требало да буде понављања кључева.

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

py_dict["Learn"]
# Output: True

Функционално, речник је сличан хеш мапи. Дакле, то није нужно уређена структура података. Можете приступити садржају речника било којим произвољним редоследом, све док знате кључеве.

Редослед ставки у речнику

У ранијим верзијама Питхона, морали сте да користите ОрдередДицт да се сачува ред кључева. Међутим, од Питхон-а 3.7, можете приступити ставкама истим редоследом којим их додајете у речник.

Сада када сте научили основе Питхон речника, хајде да научимо како да креирамо сортиране копије речника.

⚙ Напомена: Морате да имате Питхон 3.7 или новију да би код у овом водичу радио како се очекује. Можете преузети најновија верзија Питхон-аили покрените примере у вдзвдз Онлине Питхон Едитор-у.

  Сада са бољом бочном траком, побољшаном сликом у слици и још много тога

Како сортирати Питхон речник по кључу

Погледајте следећу слику менија десерта у кафићу. Постоје две колоне које одговарају ставкама у менију и њиховим ценама.

Ово можете представити у облику Питхон речника прикупљањем имена ставки као кључева и њихових цена као вредности.

Идемо даље и креирамо десерте из речника, као што је приказано у наставку.

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

Затим, направимо речник сортед_дессертс, где су десерти распоређени по абецедном реду. У оригиналном речнику десерта, називи десерта су кључеви. Дакле, требало би да сортирате ове кључеве по абецедном реду да бисте креирали нови речник.

Како приступити кључевима Питхон речника

Да бисмо то урадили, прво ћемо добити кључеве речника, а затим их сортирати по абецедном реду.

У Питхон-у можете користити уграђени метод речника .кеис() да бисте добили листу свих кључева у речнику.

Позовимо методу .кеис() у речнику десерта да бисмо преузели кључеве, као што је приказано испод.

keys = desserts.keys()
print(keys)

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

Позивање Питхон-ове уграђене сортед() функције са листом као аргументом враћа нову сортирану листу.

Затим, позовимо сортед() функцију са кључевима листе као аргументом и ускладиштимо сортирану листу у променљивој сортед_кеис.

sorted_keys = sorted(keys)
print(sorted_keys)

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

Сада када имамо кључеве сортиране по абецедном реду, можемо да потражимо вредности које одговарају кључевима у сортед_кеис из речника десерта, као што је приказано испод.

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}

Хајде да проширимо горњи блок кода:

  • Иницијализујте сортед_дессертс да буде празан Питхон речник.
  • Прођите кроз листу кључева сортед_кеис.
  • За сваки кључ у сортед_кеис, додајте унос у сортед_дессертс тако што ћете потражити одговарајућу вредност у речнику десерта.
  ГетУпсиде промотивни код за постојеће кориснике: Искористите одмах

Оваква употреба фор петље сматра се опширном. У Питхон-у постоји сажетија алтернатива која користи разумевање речника.

Разумевање речника у Питхон-у

Питхон подржава употребу разумевања речника, слично разумевању листе. Разумевање речника вам омогућава да креирате нови Питхон речник са само једном линијом кода.

▶ Ево опште конструкције за коришћење разумевања речника у Питхон-у.

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

Хајде да користимо другу конструкцију у горњој ћелији: нев_дицт = {кеи:валуе фор кеи ин <итерабле>} да направимо речник сортед_дессертс.

У овом примеру:

  • итерабле: листа сортираних_кључева
  • кључ: кључ којем приступамо петљом кроз сортед_кеис
  • вредност: потражите вредност која одговара кључу из речника десерта, десерти[key]

Стављајући све заједно, имамо израз за разумевање речника, као што је приказано у наставку.

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}

Из горњег излаза, десерти су распоређени по абецедном реду у речнику сортед_дессертс.

Како сортирати Питхон речник по вредности

Затим ћемо научити како да сортирамо Питхон речник према његовим вредностима.

У речнику десерта вредности одговарају ценама десерта. Можда ћете желети да сортирате речник по ценама, било по растућем или опадајућем редоследу.

▶ Можете да користите уграђени метод речника .итемс() да бисте добили све парове кључ-вредност. Сваки тупле је пар кључ-вредност.

desserts.items()

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

Свака од ставки је сама по себи торка. Дакле, такође можете да индексирате сваки пар кључ-вредност да бисте појединачно приступили кључевима и вредностима.

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

Како бисмо желели да сортирамо по вредностима, користићемо горњи метод да добијемо вредност на индексу 1 у пару кључ-вредност.

  Смисхинг вс. Пхисхинг напади: које су разлике?

Како сортирати вредности Питхон речника у растућем редоследу

Овај пут ћемо користити функцију сортед() заједно са опционим параметром кључа. кључ може бити било која Питхон функција, уграђена функција, кориснички дефинисана функција или чак а ламбда функција.

Напомена: ламбда аргс: израз је синтакса за дефинисање ламбда функција у Питхон-у.

У овом примеру сортирања десерта по цени, имамо приступ ставкама речника (парови кључ-вредност). Поставићемо кључ = ламбда ставка:ставка[1] као што бисмо желели да сортирамо по вредности (цени).

Пошто функција сортед() подразумевано враћа листу, требало би да је експлицитно пребаците у дицт, као што је приказано испод.

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}

Такође можете преписати користећи разумевање речникакао што је раније речено.

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}

У сортед_десертс, Цуп Цаке по цени од 2 долара је прва ставка, а Бровниес по цени од 12 долара је последња.

Како сортирати вредности Питхон речника у опадајућем редоследу

Ако желите да сортирате цене у опадајућем редоследу, можете да подесите опциони реверзни параметар на Тачно, као што је објашњено у наставку.

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}

Сада су сортед_дессертс сортирани по опадајућем редоследу цена, почевши од најскупљег десерта Бровниес који кошта 12 долара.

Завршавање 👩🏽‍💻

Хајде да брзо сумирамо све што смо научили у овом водичу.

  • Питхон речник складишти податке у паровима кључ/вредност; сви кључеви треба да буду јединствени.
  • У процесу сортирања речника по кључу или вредности, креирамо нови речник који се сортира по потреби.
  • Можете користити уграђене методе речника, .кеис() и .итемс() да бисте преузели све кључеве и парове кључ-вредност, респективно.
  • Можете да користите функцију сортед() заједно са тастером опционих параметара и обрнуто да бисте постигли жељено сортирање.

Сада када сте научили како да сортирате Питхон речник, научите да сортирате Питхон листе. Срећно кодирање!🎉