সমস্যা
ডিকশনারির একটি লিস্ট দেওয়া আছে, প্রতিটিতে name এবং roll কী আছে। এই লিস্টকে ভিন্ন ভিন্ন ভ্যালু অনুযায়ী সর্ট করতে হবে।
উদাহরণ ডেটা
my_list = [
{"name": "Adwaita", "roll": 100},
{"name": "Aadrika", "roll": 234},
{"name": "Sakya", "roll": 23}
]
সর্টিং পদ্ধতিগুলো
১. Roll অনুযায়ী Ascending
sorted_by_roll = sorted(my_list, key=lambda x: x['roll'])
print(sorted_by_roll)
# [{'name': 'Sakya', 'roll': 23}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Aadrika', 'roll': 234}]
২. Roll তারপর Name অনুযায়ী (টাই ব্রেকার)
sorted_by_roll_name = sorted(my_list, key=lambda x: (x['roll'], x['name']))
print(sorted_by_roll_name)
# একই আউটপুট (রোল ইউনিক হলে)
৩. Roll অনুযায়ী Descending
sorted_desc = sorted(my_list, key=lambda x: x['roll'], reverse=True)
print(sorted_desc)
# [{'name': 'Aadrika', 'roll': 234}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Sakya', 'roll': 23}]
৪. Name অনুযায়ী সর্ট
sorted_by_name = sorted(my_list, key=lambda x: x['name'])
print(sorted_by_name)
# [{'name': 'Aadrika', 'roll': 234}, {'name': 'Adwaita', 'roll': 100}, {'name': 'Sakya', 'roll': 23}]
৫. operator.itemgetter ব্যবহার (দ্রুততর)
from operator import itemgetter
sorted_roll = sorted(my_list, key=itemgetter('roll'))
sorted_roll_name = sorted(my_list, key=itemgetter('roll', 'name'))
sorted_name = sorted(my_list, key=itemgetter('name'))
inplace সর্ট (লিস্ট পরিবর্তন)
my_list.sort(key=lambda x: x['roll']) # নতুন লিস্ট না বানিয়ে সেম লিস্ট সর্ট
নেস্টেড ডিকশনারি/কমপ্লেক্স কী
# যদি ডিকশনারি নেস্টেড হয়
data = [{"info": {"age": 25, "score": 90}}, {"info": {"age": 20, "score": 95}}]
sorted_data = sorted(data, key=lambda x: x['info']['score'], reverse=True)