نوع داده دیکشنری در پایتون | به زبان ساده
در «زبان برنامهنویسی پایتون» (Python Programming Language)، شش «نوع داده» (Data Type) اصلی وجود دارد. این انواع داده، شامل «عدد» (Number)، «لیست» (List)، «تاپل» (Tuple)، «رشته» (String)، «مجموعه» (Set) و «دیکشنری» (Dictionary) میشوند. در این مطلب، نوع داده دیکشنری در پایتون مورد بررسی قرار گرفته است و به مباحث گوناگون پیرامون آن شامل روش ساخت دیکشنری در پایتون ، دسترسی به عناصر دیکشنری در پایتون ، اضافه و حذف کردن عناصر از دیکشنری در پایتون و متدهای توکار متعددی که برای کار با دیکشنری در پایتون وجود دارد پرداخته میشود.
نوع داده دیکشنری در پایتون یک مجموعه فاقد ترتیب از عناصر است. در حالی که دیگر انواع داده در پایتون معمولا ترکیبی از عناصر را میپذیرند، دیکشنری یک جفت «کلید: مقدار» دارد. دیکشنریها به گونهای بهینه شدهاند که در صورت شناخته شده بودن کلید، مقادیر قابل بازیابی از دیکشنری باشند.
روش ساخت دیکشنری در پایتون
ساخت یک دیکشنری کاری ساده محسوب میشود زیرا تنها کافی است که مقادیر داخل دو آکولاد قرار بگیرند و توسط کاما از هم جدا شوند. یک عنصر دارای یک کلید است و مقدار متناظر آن به صورت جفت «کلید: مقدار» بیان میشود.
در حالی که مقادیر میتوانند از هر نوع دادهای باشند و قابل تکرار نیز هستند، کلیدها باید از یک نوع غیر قابل تغییر (رشته، عدد یا تاپل با عنصر غیر قابل تغییر) و یکتا باشند.
1# empty dictionary
2my_dict = {}
3
4# dictionary with integer keys
5my_dict = {1: 'apple', 2: 'ball'}
6
7# dictionary with mixed keys
8my_dict = {'name': 'John', 1: [2, 4, 3]}
9
10# using dict()
11my_dict = dict({1:'apple', 2:'ball'})
12
13# from sequence having each item as a pair
14my_dict = dict([(1,'apple'), (2,'ball')])
همانطور که در کد بالا قابل مشاهده است، میتوان یک دیکشنری را با استفاده از تابع توکار ()dict ساخت.
روش دسترسی به عناصر دیکشنری در پایتون
در حالی که برای دسترسی به عناصر دیگر انواع داده ظرف، از اندیسدهی استفاده میشود، در دیکشنری از کلیدها استفاده میشود. کلیدها را میتوان درون کروشه قرار دارد و یا از متد ()get استفاده کرد.
تفاوت میان استفاده از کروشه و ()get در آن است که هنگام استفاده از متد ()get در صورتی که کلید وجود نداشته باشد، به جای خطای KeyError، پیام None بازگردانده میشود.
1my_dict = {'name':'Jack', 'age': 26}
2
3# Output: Jack
4print(my_dict['name'])
5
6# Output: 26
7print(my_dict.get('age'))
8
9# Trying to access keys which doesn't exist throws error
10# my_dict.get('address')
11# my_dict['address']
هنگامی که برنامه اجرا شود، خروجی به صورت زیر خواهد بود.
Jack 26 None Traceback (most recent call last): File "<string>", line 15, in <module> print(my_dict['address']) KeyError: 'address'
روش تغییر یا اضافه کردن عنصر در دیکشنری در پایتون
دیکشنریها قابل تغییر هستند. میتوان عناصر جدید را به دیکشنری افزود و یا مقدار عناصر موجود را با استفاده از عملگر تخصیص (=) تغییر داد. اگر کلید موجود باشد، مقدار به روز رسانی میشود.
در غیر این صورت، یک جفت «کلید: مقدار» جدید ساخته میشود.
1my_dict = {'name':'Jack', 'age': 26}
2
3# update value
4my_dict['age'] = 27
5
6#Output: {'age': 27, 'name': 'Jack'}
7print(my_dict)
8
9# add item
10my_dict['address'] = 'Downtown'
11
12# Output: {'address': 'Downtown', 'age': 27, 'name': 'Jack'}
13print(my_dict)
در صورت اجرای کد بالا، خروجی به صورت زیر خواهد بود:
1{'name': 'Jack', 'age': 27}
2{'name': 'Jack', 'age': 27, 'address': 'Downtown'}
روش حذف عناصر دیکشنری در پایتون
میتوان با استفاده از متد ()pop یک عنصر خاص را از دیکشنری حذف کرد. این متد، یک عنصر را بر اساس کلید آن حذف میکند و مقدار آن را باز میگرداند. متد ()popitem میتواند برای حذف و بازگرداندن یک عنصر دلخواه (کلید، مقدار) از دیکشنری مورد استفاده قرار بگیرد.
همه عناصر دیکشنری را میتوان با استفاده از متد ()clear به صورت یکباره حذف کرد. همچنین، میتوان از کلیدواژه del برای حذف عناصر یا کل دیکشنری استفاده کرد.
1# create a dictionary
2squares = {1:1, 2:4, 3:9, 4:16, 5:25}
3
4# remove a particular item
5# Output: 16
6print(squares.pop(4))
7
8# Output: {1: 1, 2: 4, 3: 9, 5: 25}
9print(squares)
10
11# remove an arbitrary item
12# Output: (1, 1)
13print(squares.popitem())
14
15# Output: {2: 4, 3: 9, 5: 25}
16print(squares)
17
18# delete a particular item
19del squares[5]
20
21# Output: {2: 4, 3: 9}
22print(squares)
23
24# remove all items
25squares.clear()
26
27# Output: {}
28print(squares)
29
30# delete the dictionary itself
31del squares
32
33# Throws Error
34# print(squares)
پس از اجرای قطعه کد بالا، خروجی به صورت زیر خواهد بود.
16 {1: 1, 2: 4, 3: 9, 5: 25} (1, 1) {2: 4, 3: 9, 5: 25} {2: 4, 3: 9} {}
متدهای نوع داده دیکشنری در پایتون
متدهای موجود برای نوع داده دیکشنری در پایتون، در ادامه آورده شدهاند. برخی از این متدها، در مثالهایی که پیشتر بیان شد مورد استفاده قرار گرفتهاند.
- ()clear: همه عناصر دیکشنری را حذف میکند.
- ()copy: یک Shallow Copy از دیکشنری را باز میگرداند.
- ([fromkeys(seq[, v: یک دیکشنری جدید با کلیدهایی از seq و مقداری مساوی با v باز میگرداند (به طور پیشفرض None است).
- ([get(key[,d: مقدار key را باز میگرداند. اگر key موجود نباشد، d را باز میگرداند (به طور پیشفرض None است).
- ()items: یک دید جدید از عناصر دیکشنری ارائه میکند (کلید، مقدار).
- ()keys: یک دید جدید از کلیدهای دیکشنری ارائه میکند.
- ([pop(key[,d: عنصر با key داده شده را حذف میکند و مقدار آن را باز میگرداند و یا اگر کلید وجود نداشت، مقدار یا d را باز میگرداند. در صورتی که d داده نشده باشد و key نیز پیدا نشود، خطای KeyError نمایش داده میشود.
- ()popitem: یک عنصر دلخواه را حذف میکند و مقدار آن را (کلید، مقدار) باز میگرداند. در صورت خالی بودن دیکشنری، خطای KeyError را نمایش می دهد.
- ([setdefault(key[,d: اگر key در دیکشنری قرار دارد، مقدار آن را باز میگرداند. در غیر این صورت، key را با مقدار d درج میکند و d را بازمیگرداند (به طور پیشفرض None است).
- ([update([other: دیکشنری را با جفتهای کلید/مقدار از other به روز رسانی میکند و کلیدهای موجود را بازنویسی میکند.
- ()values: یک دید جدید از مقدار دیکشنری را بازمیگرداند.
در ادامه، مثالهایی از این متدها ارائه شده است.
1marks = {}.fromkeys(['Math','English','Science'], 0)
2
3# Output: {'English': 0, 'Math': 0, 'Science': 0}
4print(marks)
5
6for item in marks.items():
7 print(item)
8
9# Output: ['English', 'Math', 'Science']
10list(sorted(marks.keys()))
Dictionary Comprehension در پایتون
Dictionary Comprehension یک راه خوب و کوتاه برای ساخت دیکشنری از یک نوع داده قابل تکرار در پایتون است. Dictionary Comprehension شامل یک جفت «کلید: مقدار» است که با یک statement درون آکولاد دنبال میشود.
در ادامه، مثالی برای ساخت دیکشنری از جفتهایی عدد و مربع آن ارائه شده است.
1squares = {x: x*x for x in range(6)}
2
3# Output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
4print(squares)
کد بالا، عملکردی مشابه کد زیر دارد:
1squares = {}
2for x in range(6):
3 squares[x] = x*x
یک Dictionary Comprehension میتواند عبارات for یا if بیشتری را به صورت دلخواه در بر بگیرد. یک عبارت if دلخواه، میتواند عناصر را برای ساخت یک دیکشنری جدید فیلتر کند. در ادامه، مثالهایی برای ساخت دیکشنری تنها با عناصر فرد زده شده است.
1odd_squares = {x: x*x for x in range(11) if x%2 == 1}
2
3# Output: {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
4print(odd_squares)
دیگر عملیات دیکشنری در پایتون
در ادامه، دیگر عملیات قابل انجام در دیکشنری مورد بررسی قرار میگیرد.
تست عضویت دیکشنری
با استفاده از in میتوان بررسی کرد که آیا یک کلید در دیکشنری وجود دارد یا خیر. شایان توجه است که تست عضویت فقط برای کلیدها است و نه مقادیر.
1squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
2
3# Output: True
4print(1 in squares)
5
6# Output: True
7print(2 not in squares)
8
9# membership tests for key only not value
10# Output: False
11print(49 in squares)
حلقه زدن در دیکشنری
با استفاده از حلقه for میتوان در کلیدهای دیکشنری حلقه زد. مثال زیر در همین رابطه قابل توجه است.
1squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
2for i in squares:
3 print(squares[i])
توابع توکار با دیکشنری
توابع توکار مانند ()any() ،len() ،cmp() ،sorted و ()all برای انجام وظایف گوناگون به طور متداول با دیکشنریها مورد استفاده قرار میگیرند. در ادامه، کارکرد هر یک از متدهای مربوط به دیکشنری در پایتون بیان شده است.
- ()all: اگر همه کلیدهای دیکشنری صحیح هستند (یا اگر دیکشنری خالی است)، مقدار True را باز میگرداند.
- ()any: اگر هر کلیدی از دیکشنری صحیح است، مقدار True را بازمیگرداند. اگر دیکشنری خالی است، False را بازمیگرداند.
- ()len: طول دیکشنری (تعداد عناصر آن) را باز میگرداند.
- ()cmp: عناصر دو دیکشنری را مقایسه میکند.
- ()sorted: یک لیست مرتب شده جدید از کلیدها را در دیکشنری باز میگرداند.
در ادامه، مثالهایی ارائه شده است که در آنها از توابع توکار برای کار با دیکشنری استفاده میکنند.
1squares = {1: 1, 3: 9, 5: 25, 7: 49, 9: 81}
2
3# Output: 5
4print(len(squares))
5
6# Output: [1, 3, 5, 7, 9]
7print(sorted(squares))
8
9 <div class="faradars-courses faradars-courses-single">
10 <a href="https://faradars.org/how-to-learn/python-programming?utm_source=blog.faradars&utm_medium=referral-post&utm_campaign=related-courses-inline-5&utm_term=elibugy&utm_content=programming_computer-science_engineering" target="_blank">
11 <div class="card card-course">
12 <div class="card-image">
13 <img class="pop-img" src="https://faradars.org/wp-content/uploads/2022/09/28/phyton-programming.svg" alt="مجموعه آموزش برنامه نویسی پایتون Python – مقدماتی تا پیشرفته">
14 </div>
15 <div class="card-body">
16 <div class="card-title">
17 فیلم مجموعه آموزش برنامه نویسی پایتون Python – مقدماتی تا پیشرفته در فرادرس
18 </div>
19 </div>
20 <div class="card-action ml-3">
21 <div class="fdb-btn">کلیک کنید</div>
22 </div>
23 </div>
24 </a>
25 </div>
26
چجوری میتونیم تغییراتی که در دیکشنری ایجاد میکنیم ماندگار بمونه و با ریست کردن از بین نره؟؟؟
چجوری میشه چند تا ولیو رو برای یک کی گذاشت؟ به غیر از اینکه یک لیست بزاریم به عنوان ولیو.