
دیکشنری در پایتون چیست و چطور یکی بسازیم؟
پایتون یک زبان برنامه نویسی با ابزارها و قابلیت های زیادی هست. یکی از این قابلیت ها، دیکشنری (Dictionary) هست. دیکشنری در پایتون مجموعه ای از جفت های کلید-مقدار (Key-Value) محسوب میشه. کلیدهای دیکشنری باید یکتا باشن، اما مقدار میتونه از هر نوع داده ای باشه.
- دیکشنری در پایتون چیست و چطور یکی بسازیم؟
- دیکشنری در پایتون چیست؟
- چطور یک دیکشنری در پایتون بسازیم؟
- پیچیدگی های ایجاد یک دیکشنری
- تغییر و اضافه کردن عناصر به دیکشنری
- دسترسی به عناصر دیکشنری
- متدها
- کامپریهنشن ( Comprehension) دیکشنری در پایتون
- توابع داخلی دیکشنری در پایتون
- متد کلید ها (keys) در دیکشنری پایتون
- متد ولیوز (values) در دیکشنری پایتون
- نتیجه گیری
- سوالات متداول
توی این مطلب، دیکشنری در پایتون رو بررسی میکنیم و یاد میگیریم چطور ازش استفاده کنیم.
دیکشنری در پایتون چیست؟
دیکشنری (Dictionary) یک نوع ساختار داده ای در پایتون هست که داده ها رو به صورت جفت های کلید-مقدار (Key-Value) ذخیره میکنه. کلیدها، شناسه های یکتایی برای هر مقدار هستن و مقدار هم داده ای هست که به اون کلید مرتبطه. دیکشنری ها معمولا برای ذخیره اطلاعاتی مثل کلمات و تعاریف استفاده میشن، اما کاربردهای خیلی بیشتری دارن.
دیکشنری ها در پایتون قابل تغییر (Mutable) هستن، یعنی بعد از ساخته شدن میتونن تغییر کنن. همچنین بدون ترتیب (Unordered) هستن، به این معنی که آیتم های داخل دیکشنری به ترتیب خاصی ذخیره نمیشن.
چطور یک دیکشنری در پایتون بسازیم؟
دیکشنری ها با استفاده از آکولاد {} ساخته میشن. در این ساختار:
- کلید در سمت چپ دو نقطه (:) قرار میگیره
- مقدار در سمت راست دو نقطه نوشته میشه
- هر جفت کلید-مقدار با کاما (,) از هم جدا میشن
ساخت دیکشنری در پایتون خیلی ساده هست. فقط کافیه از آکولاد {} استفاده کنید و جفت های کلید-مقدار رو داخلش قرار بدید.
برای ایجاد دیکشنری در پایتون، از نوع داده ی داخلی دیکشنری (Dictionary) استفاده میشه. این نوع داده می تونه انواع مختلفی از اطلاعات مثل اعداد صحیح (Integers)، رشته ها (Strings) و لیست ها (Lists) رو ذخیره کنه.
دیکشنری ها شباهت هایی به لیست دارن، اما به جای ایندکس، از کلیدها برای دسترسی به مقادیر استفاده میکنن. این ویژگی باعث میشه که داده ها رو سریع تر و راحت تر مدیریت کنید.
از تابع dict() در پایتون برای ایجاد یک دیکشنری استفاده میکنید. این تابع دو آرگومان میگیره:
- آرگومان اول: یک لیست از کلیدها
- آرگومان دوم: یک لیست از مقادیر
مثالی از نحوه ی ایجاد دیکشنری با استفاده از تابع dict():
# empty dictionary
my_dict = {}
# dictionary with integer keys
my_dict = {1: 'apple', 2: 'ball'}
# dictionary with mixed keys
my_dict = {'name': 'John', 1: [2, 4, 3]}
# using dict()
my_dict = dict({1:'apple', 2:'ball'})
# from sequence having each item as a pair
my_dict = dict([(1,'apple'), (2,'ball')])
پیچیدگی های ایجاد یک دیکشنری
پیچیدگی زمانی برای دیکشنری برابر با O(len(dict)) هست، چون دیکشنری باید ایجاد بشه و تابع هش باید مقدار هش هر عنصر رو محاسبه کنه. پیچیدگی فضایی مورد نیاز برای ایجاد یک دیکشنری برابر با O(N) هست.
تغییر و اضافه کردن عناصر به دیکشنری
در پایتون، دیکشنری ها ساختارهای داده ای قابل تغییر (Mutable) هستن که به شما اجازه میدن جفت های کلید – مقدار (Key-Value) ذخیره کنین. دیکشنری رو میشه با استفاده از سازنده ()dict یا آکولاد {} ایجاد کرد. وقتی دیکشنری ساخته شد، میتونین عناصر رو اضافه، حذف یا به روز رسانی کنین با استفاده از متدهای
()dict.update()،dict.pop و ()dict.popitem.
متد dict.update() برای تغییر یک عنصر در دیکشنری استفاده میشه. این متد یک کلید و مقدار رو به عنوان آرگومان میگیره و مقدار رو به کلید مورد نظر اختصاص میده. اگر کلید در دیکشنری وجود نداشته باشه، اون رو به دیکشنری اضافه میکنه.
برای حذف یک عنصر از دیکشنری، میتونین از متد ()dict.pop استفاده کنین. این متد یک کلید رو به عنوان آرگومان میگیره و جفت کلید – مقدار مربوط به اون رو از دیکشنری حذف میکنه. اگر کلید مورد نظر در دیکشنری وجود نداشته باشه، ()dict.pop یک KeyError برمیگردونه.
متد ()dict.popitem برای حذف یک عنصر تصادفی از دیکشنری استفاده میشه. این متد یک جفت کلید – مقدار تصادفی رو از دیکشنری حذف میکنه و به صورت یک تاپل (Tuple) برمیگردونه. اگر دیکشنری خالی باشه، ()dict.popitem یک KeyError برمیگردونه.
دسترسی به عناصر دیکشنری
در پایتون، عناصر دیکشنری بر اساس کلیدشون قابل دسترسی هستن، نه بر اساس ایندکس. این یعنی شما نمیتونین به یک عنصر دیکشنری با استفاده از موقعیتش در دیکشنری دسترسی داشته باشین، بلکه باید از کلید اون استفاده کنین.
دو روش برای دسترسی به یک عنصر دیکشنری در پایتون وجود داره:
استفاده از متد ()get
این متد دو آرگومان میگیره: کلید دیکشنری و یک مقدار پیش فرض. اگر کلید در دیکشنری وجود داشته باشه، متد ()get مقدار مرتبط با اون کلید رو برمیگردونه. اگر کلید در دیکشنری وجود نداشته باشه، مقدار پیش فرض برگردونده میشه
استفاده از عملگر []
این عملگر کلید دیکشنری رو به عنوان آرگومان میگیره و مقدار مرتبط با اون رو برمیگردونه. اگر کلید در دیکشنری وجود نداشته باشه، عملگر [] یک KeyError برمیگردونه
# get vs [] for retrieving elements
my_dict = {'name': 'Jack', 'age': 26}
# Output: Jack
print(my_dict['name'])
# Output: 26
print(my_dict.get('age'))
# Trying to access keys that don't exist throws an error
# Output None
print(my_dict.get('address'))
# KeyError
print(my_dict['address'])
متدها
در پایتون، چندین متد داخلی وجود دارن که به ما اجازه میدن دیکشنری ها رو مدیریت کنیم. این متدها برای اضافه کردن، حذف کردن و تغییر مقدار کلیدهای دیکشنری کاربرد دارن. متدهای دیکشنری یک روش قدرتمند برای کار با دیکشنری ها هستن. با درک نحوه عملکرد این متدها، میتونیم دیکشنری ها رو به شکل موثرتری برای ذخیره و مدیریت داده ها استفاده کنیم.
توضیحات | متد |
---|---|
تمام عناصر موجود در دیکشنری رو حذف میکنه | کلیر () clear |
یک کپی از دیکشنری رو برمیگردونه | کپی () copy |
مقدار مربوط به کلید مشخص شده رو برمیگردونه | گت () get |
یک ایندکس برمیگردونه که شامل یک تاپل برای هر جفت کلید – مقدار هست | آیتمز () items |
یک لیست شامل کلیدهای دیکشنری رو برمیگردونه | کلید ها () keys |
عنصری که کلید مشخص شده رو داره حذف میکنه | پاپ () pop |
آخرین جفت کلید – مقدار وارد شده رو حذف میکنه | پاپ آیتم () popitem |
مقدار مشخص شده برای کلید رو برمیگردونه. اگر کلید در دیکشنری وجود نداشته باشه، مقدار مشخص شده رو برای کلید وارد میکنه | ست دیفالت () setdefault |
کلیدها و مقادیر مشخص شده رو به صورت دیکشنری برمیگردونه | فرام کیز () fromkeys |
جفت های کلید – مقدار مشخص شده رو در دیکشنری به روز رسانی میکنه | آپدیت () update |
لیستی از مقادیر موجود در دیکشنری رو برمیگردونه | ولیوز () values |
کامپریهنشن ( Comprehension) دیکشنری در پایتون
کامپریهنشن دیکشنری (Dictionary Comprehension) یک قابلیت توی پایتونه که به شما اجازه میده دیکشنری رو از یک لیست یا یک دیکشنری دیگه فقط در یک خط کد بسازین. این روش خیلی خلاصه و جمع و جوره و میشه ازش برای انجام عملیات مختلف روی دیکشنری ها استفاده کرد. ساختار کامپریهنشن دیکشنری به این صورته که کلید: مقدار بعد از یک حلقه فور داخل آکولاد {}
نوشته میشه.
# Dictionary Comprehension
squares = {x: x*x for x in range(6)}
print(squares)
توابع داخلی دیکشنری در پایتون
دیکشنری ها چندین تابع داخلی دارن که به شما اجازه میدن عملیات مختلفی رو روی اون ها انجام بدین. از جمله رایج ترین توابع دیکشنری میشه به آل (all)، اِنی (any)، لِن (len)، کِمپ (cmp) و سورتد (sorted) اشاره کرد.
توضیحات | توابع دیکشنری |
---|---|
این تابع بررسی میکنه که آیا تمام کلیدهای دیکشنری مقدار True دارن یا نه. اگر همه مقدارها True باشن، مقدار True برمیگردونه. در غیر این صورت False برمیگردونه | () all |
این تابع بررسی میکنه که آیا حداقل یکی از مقدارهای دیکشنری True هست یا نه. اگر حداقل یک مقدار True باشه، مقدار True برمیگردونه. در غیر این صورت False برمیگردونه | () any |
این تابع برای مقایسه دو دیکشنری بر اساس کلیدهاشون استفاده میشه. اگر دیکشنری اول کوچیک تر از دیکشنری دوم باشه، مقدار منفی برمیگردونه. اگر دیکشنری اول بزرگ تر باشه، مقدار مثبت برمیگردونه. اگر هر دو دیکشنری برابر باشن، مقدار 0 برمیگردونه | () cmp |
این تابع برای مرتب سازی دیکشنری در پایتون استفاده میشه. این تابع دو آرگومان میگیره: دیکشنری مورد نظر برای مرتب سازی و کلیدی که مرتب سازی بر اساس اون انجام میشه. این کلید میتونه یک تابع، لیست یا تاپل باشه. خروجی این تابع یک لیست از تاپل هاست که هر تاپل شامل یک کلید و مقدار هست | () sorted |
این تابع داخلی طول یک شی رو برمیگردونه. میشه ازش روی انواع مختلفی از اشیا مثل رشته ها، لیست ها، دیکشنری ها و … استفاده کرد | () len |
متد کلید ها (keys) در دیکشنری پایتون
متد کلیدها در دیکشنری پایتون یک شی نمایشی (View Object) برمیگردونه که تمام کلیدهای دیکشنری رو نمایش میده. اشیای نمایشی ویژگی های مشابهی با دیکشنری ای که داخلشون تعریف شدن دارن. مثلا میتونین از یک شی نمایشی برای پیمایش (Iterate) و چاپ تمام کلیدهای دیکشنری استفاده کنین. همچنین میشه بررسی کرد که آیا یک کلید در این شی نمایشی وجود داره یا نه.
numbers = {1: 'one', 2: 'two', 3: 'three'}
# extracts the keys of the dictionary
dictionary keys = numbers.keys()
print(dictionaryKeys)
# Output: dict_keys([1, 2, 3])
متد ولیوز (values) در دیکشنری پایتون
متد ولیوز یک شی نمایشی (View Object) برمیگردونه که لیستی از تمام مقدارهای دیکشنری رو نمایش میده.
با استفاده از این متد، میتونین لیست تمام مقدارهای دیکشنری رو دریافت کنین. این شی نمایشی تغییرات اعمال شده روی دیکشنری رو منعکس میکنه، یعنی اگر مقدار جدیدی به دیکشنری اضافه کنین یا مقدار قبلی رو حذف کنین، خروجی این متد هم به روز میشه.
متد ولیوز با متد کیز (keys) تفاوت داره، چون هیچ آرگومانی نمیگیره و فقط مقدارهای دیکشنری رو برمیگردونه.
marks = {'Physics':67, 'Maths':87}
print(marks.values())
# Output: dict_values([67, 87])
نتیجه گیری
پایتون یک زبان فوق العاده هست که امکانات زیادی رو در اختیار شما قرار میده. این زبان دارای ساختار کد منظمیه که باعث میشه درک و یادگیری اون راحت تر باشه. با توجه به اینکه پایتون یکی از مهم ترین زبان های برنامه نویسی در دنیای امروزه، داشتن درک عمیق از این زبان خیلی مهمه. دوره آموزشی Python Training از Simplilearn یکی از بهترین دوره های پایتونه که میتونه به شما در یادگیری مفاهیم پایه و مباحث اصلی این زبان کمک کنه. این دوره تجربه برنامه نویسی عملی رو در اختیارتون میذاره و شما رو برای یک مسیر شغلی هیجان انگیز به عنوان یک برنامه نویس حرفه ای پایتون آماده میکنه.
سوالات متداول
چطور یک دیکشنری رو در پایتون مرتب کنیم؟
برای مرتب کردن دیکشنری در پایتون بر اساس کلیدها یا مقدارها، میتونین از تابع سورتد (sorted) همراه با تابع لامبدا (lambda function) یا یک تابع کلید سفارشی (custom key function) استفاده کنین. مثلا برای مرتب سازی بر اساس کلیدها:
sorted_dict = dict(sorted(my_dict.items()))
و برای مرتب سازی بر اساس مقدارها:
sorted_dict = dict(sorted(my_dict.items(), key=lambda item: item[1]))
چطور یک لیست رو به دیکشنری در پایتون تبدیل کنیم؟
میتونین با استفاده از کامپریهنشن لیست (list comprehension) یا تابع زیپ (zip) یک لیست رو به دیکشنری تبدیل کنین. برای مثال:
my_list = ['a', 'b', 'c']
میتونه به یک دیکشنری با کلیدها و مقدارها تبدیل بشه:
my_dict = {key: value for key, value in enumerate(my_list)}.
چطور یک دیکشنری رو در پایتون اضافه کنیم؟
برای اضافه کردن یا الحاق عناصر به یک دیکشنری در پایتون، میتونین مستقیما یک جفت کلید – مقدار جدید اختصاص بدین، یا از متد :
update()
متد آپدیت (update) برای ادغام یک دیکشنری دیگه در دیکشنری موجود استفاده کنین. برای مثال:
my_dict['new_key'] = 'new_value' or my_dict.update({'new_key': 'new_value'})
چطور روی دیکشنری ها در پایتون پیمایش کنیم؟
میتونین با استفاده از یک حلقه فور (for loop) روی دیکشنری پیمایش کنین و به کلیدها، مقدارها یا جفت های کلید – مقدار دسترسی داشته باشین. برای مثال، برای پیمایش روی کلیدها:
for key in my_dict.keys()
روی مقدارها:
for value in my_dict.values()
یا روی جفت های کلید – مقدار:
for key, value in my_dict.items().
چطور عناصر رو به یک دیکشنری در پایتون اضافه کنیم؟
برای اضافه کردن عناصر به یک دیکشنری در پایتون، میتونین مستقیما یک جفت کلید – مقدار جدید رو با استفاده از نماد کروشه (subscript notation) اختصاص بدین. برای مثال:
my_dict['new_key'] = 'new_value'
اگر کلید از قبل وجود داشته باشه، مقدار اون به روز رسانی میشه؛ در غیر این صورت، یک جفت کلید – مقدار جدید به دیکشنری اضافه میشه.
چطور یک رشته (String) رو به دیکشنری در پایتون تبدیل کنیم؟
برای تبدیل یک رشته به دیکشنری در پایتون، میتونین از :
json.loads()
تابع لودز (loads) از ماژول جیسون (JSON) استفاده کنین، البته به شرطی که رشته در فرمت JSON باشه. در غیر این صورت، اگه رشته از یک فرمت خاص کلید – مقدار پیروی کنه، میتونین با دستکاری رشته (string manipulation) یا عبارات منظم (regular expressions) اون رو پردازش و به دیکشنری تبدیل کنین. برای مثال:
import json
و بعد:
my_dict = json.loads(my_string)
اگر رشته در فرمت JSON باشه.
در انتهای اگر این مقاله براتون مفید و کاربردی بود، خوشحال میشیم سوالات و نظراتتون رو با ما به اشتراک بگذارین.