مبانی اولیه‌ی پایتون - دیکشنری و none

Professional Python: Dictionary and none

09 اسفند 1399
درسنامه درس 6 از سری پایتون حرفه‌ای
Python حرفه ای: مبانی اولیه - دیکشنری و none (قسمت 06)

الگوهای رایج استفاده از لیست ها

در زبان پایتون چند الگو یا روش برای استفاده از لیست ها وجود دارد که به شدت تکرار می شوند و از بقیه پرکاربرد تر هستند. ما می خواهیم در این قسمت با این الگوها آشنا شویم تا تمرکز بیشتری روی آن ها گذاشته و در آینده راحت تر از آن ها استفاده کنیم. اولین الگوی ما استفاده از تابع len است که قبلا نیز با آن آشنا شده ایم:

my_list = [1, 10, 100, 45, 20, 33]

print(len(my_list))

با اجرای این کد عدد ۶ را می گیریم چرا که لیست ما ۶ عضو دارد.

الگوی بعدی برعکس کردن یک لیست مرتب شده است. ما در جلسه قبل توضیح دادیم که متد reverse می تواند یک لیست را برعکس کند اما اگر بخواهیم لیست را مرتب کرده و سپس برعکس کنیم چطور؟ به مثال زیر توجه کنید:

my_list = ["x", "c", "t", "w", "b", "o"]

my_list.sort()
my_list.reverse()

print(my_list)

من می خواهم این لیست که برخی از حروف الفبای انگلیسی را دارد، آن حروف را به ترتیب اما برعکس نشان بدهد. در این حالت چه کاری می توان انجام داد؟ با اجرای دو متد sort و reverse روی یک لیست، می توانید آن را مرتب کرده و سپس برعکس کنید بنابراین نتیجه به شکل زیر خواهد بود:

['x', 'w', 't', 'o', 'c', 'b']

در ضمن زبان پایتون هیچ مشکلی با فارسی ندارد بنابراین می توانیم از این متدها برای فارسی نیز استفاده کنیم:

my_list = ["س", "ش", "ب", "ه", "غ", "م"]

my_list.sort()
my_list.reverse()

print(my_list)

نتیجه:

['ه', 'م', 'غ', 'ش', 'س', 'ب']

همانطور که مشخص است حروف بالا بر اساس ترتیب الفبای فارسی مرتب شده و سپس برعکس شده اند (البته به دلیل چپ چین بودن انگلیسی، به صورت برعکس نشده مشاهده می شوند اما اگر آن را در repl.it اجرا کنید نسخه صحیح را می بینید). البته ما می توانیم فرآیند برعکس کردن را با استفاده از slicing نیز انجام بدهیم:

my_list = ["x", "c", "t", "w", "b", "o"]

my_list.sort()

print(my_list[::-1])

نکته: عملیات sort (مرتب سازی) برای لیست هایی که دارای مقادیر عددی و رشته ای باشند قابل انجام نیست چرا که راهی برای مقایسه یک مقدار رشته ای و یک مقدار عددی وجود ندارد. لیست شما یا باید تماماً عددی یا تماماً رشته ای باشد.

الگوی بعدی ساخت یک range است. range به معنی «بازه» است و زمانی که می خواهیم یک بازه ساده (مثلا برای تست کردن کدهایمان) بسازیم می توانیم از آن استفاده کنیم:

print(range(0, 100))

range یک عدد را به عنوان شروع و یک عدد دیگر را به عنوان پایان دریافت می کند. من می خواهم بازه ای بین اعداد صفر تا صد داشته باشم بنابراین صفر و صد را به عنوان مقادیر اول و دوم پاس داده ام و سپس آن را print کرده ام. با اجرای کد بالا نتیجه زیر را می گیرید:

range(0, 100)

به عبارتی یک range برایتان برگردانده می شود. در زبان پایتون range دقیقا یک «بازه» است، یعنی تعریف یک بازه را در خود دارد. حالا شما می توانید از این بازه در محل مورد علاقه خود استفاده کنید. به طور مثال ما می توانیم این بازه را به یک لیست بدهیم:

print(list(range(0, 100)))

قبلا با توابعی مانند ()int یا ()float یا ()str و ()list آشنا شده ایم و می دانیم که هر کدام مقداری را گرفته و بر اساس آن نوع داده خودش را می سازد. در اینجا نیز range را به list داده ایم تا بتواند بر اساس آن یک لیست ساده بسازد. با اجرای این دستور نتیجه زیر را دریافت خواهید کرد:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]

بنابراین به همین سادگی ۱۰۰ عدد را ساخته و در لیست خود گذاشته ایم. همچنین اگر فقط یک مقدار را به range بدهید، به صورت پیش فرض از صفر شروع می کند و تا عدد پاس داده شده جلو می رود. مثال:

print(list(range(5)))

نتیجه:

[0, 1, 2, 3, 4]

الگوی بعدی استفاده از join در لیست ها است. اگر بخواهیم دقیق تر بگوییم join یکی از متدهای رشته ها است اما یک لیست دریافت می کند و سپس آن رشته را به تک تک اعضای لیست اضافه کرده و نهایتا یک رشته را تحویل ما می دهد. به مثال زیر توجه کنید:

sentence = "!"

new_sentence = sentence.join(['Hello', 'my', 'name', 'is', 'Amir'])

print(new_sentence)

با اجرای دستور بالا نتیجه زیر را می گیریم:

Hello!my!name!is!Amir

به عبارت دیگر از رشته sentence به عنوان متصل کننده اعضای لیست استفاده کرده ایم. حالا اگر به جای علامت تعجب یک اسپیس خالی را به sentence بدهیم یک جمله ساده را داریم که می گوید Hello my name is Amir.

آخرین الگوی رایجی که در برنامه های نوشته شده به زبان پایتون می بینید قابلیت list unpacking است. فرض کنید لیست بسیار ساده ای داشته باشیم و بخواهیم این لیست را به متغیر منتسب کنیم. چه کار می کنیم؟ به سادگی از اپراتور انتساب (علامت =) استفاده می کنیم:

basket = [1,2,3]

در حال حاضر لیست ما به متغیری به نام basket منتسب شده است اما اگر بخواهیم هر کدام از مقادیر درون آن را به یک متغیر منتسب کنیم چطور؟ اگر با زبان جاوا اسکریپت آشنا باشید این مسئله شما را یاد array destructuring می اندازد. در پایتون نیز قابلیتی مشابه به نام list unpacking داریم:

num_1, num_2, str_1 = [1,2,"Roxo"]




print(num_1)

print(num_2)

print(str_1)

شما می توانید به جای نوشتن یک مقدار برای انتساب کل لیست به یک متغیر، چندین نام را پاس بدهید و آن ها را با ویرگول از هم جدا کنید. من برای ثابت کردن این موضوع این متغیر ها را print کرده ام تا نتیجه را ببینیم:

1
2
Roxo

مسئله زمانی جالب می شود که فقط بخشی از اعضای لیست را استخراج کنیم. به مثال زیر توجه کنید:

num_1, num_2, str_1, *other_items = [1,2,"Roxo", 7, 8, 9 ,10]

print(num_1)
print(num_2)
print(str_1)
print(other_items)

من می خواهم اعضای اول و دوم و سوم از لیست بالا را استخراج کنم اما بقیه اعضا را درون لیست نگه دارم بنابراین سه متغیر را پاس داده ایم و برای بقیه اعضا از علامت ستاره (*) استفاده کرده ام. پس از علامت ستاره باید یک نام را برای متغیری جدید انتخاب کنید. با اجرای کد بالا نتیجه زیر را می گیریم:

1
2
Roxo
[7, 8, 9, 10]

توجه داشته باشید که سه عضو استخراج شده عدد و رشته هستند اما بقیه اعضا هنوز هم در یک لیست قرار دارند. ما می توانیم این کار را در حالت های مختلفی انجام بدهیم. به طور مثال ما می توانیم عضو آخر را نیز جدا کنیم:

num_1, num_2, str_1, *other_items, last_item = [1,2,"Roxo", 7, 8, 9 ,10]

print(num_1)
print(num_2)
print(str_1)
print(other_items)
print(last_item)

نتیجه اجرای کد بالا:

1
2
Roxo
[7, 8, 9]
10

به همین سادگی اعضای اول، دوم، سوم و آخر را جدا کرده ایم.

نوع داده None در پایتون

زمانی که با لیست ها کار می کردیم با یک نوع داده خاص به نام None در پایتون روبرو شدیم؛ برخی از متدهای استفاده شده روی لیست ها، خودشان چیزی تولید نمی کردند بلکه فقط لیست اصلی را ویرایش می کردند بنابراین مقدار برگردانده شده توسط آن ها none (به معنی «هیچ») بود. none در پایتون نماینده «عدم وجود یک مقدار» است و اکثر زبان های برنامه نویسی آن را یا نوع داده ای معادل آن را دارند (به طور مثال در جاوا اسکریپت null را داریم).

شاید بپرسید none در پایتون چه کاربردی دارد؟ مسئله اینجاست که ما هنوز در ابتدای دوره هستیم و محل استفاده none در پایتون را ندیده ایم بنابراین فعلا نمی توانم به صورت عملی به شما نشان بدهم که none چه استفاده هایی دارد اما می توانیم آن را به متغیر ها بدهیم!

my_variable = None

به طور مثال تصور کنید که در حال ساخت یک بازی کامپیوتری هستید که در آن افراد اسلحه های مختلفی دارند اما در ابتدای بازی هیچ اسلحه ای وجود ندارد. در چنین حالتی می توانیم متغیرِ اسلحه ها را روی none بگذاریم. با این کار هم متغیر را تعریف کرده ایم و هم مقدار آن را خالی گذاشته ایم.

نوع داده Dictionary در پایتون

دیکشنری (dictionary) ها تقریبا در تمام زبان های برنامه نویسی دنیا وجود دارند اما ممکن است نام متفاوتی داشته باشند؛ به طور مثال Hash table و map و Object و غیره همگی از همین نوع هستند. لیست ها اولین data structure یا داده ساختاری بودند که آن ها را یاد گرفتیم و dictionary ها نیز یک داده ساختار دیگر هستند. اگر یادتان باشد توضیح دادم که داده ساختارها نحوه ذخیره سازی اطلاعات را مشخص می کنند؛ به طور مثال در مورد لیست ها گفتم که از طریق مفهومی به نام ایندکس مرتب شده هستند بنابراین می توانیم از طریق همین ایندکس (index) به مقدار (value) آن ها دسترسی داشته باشیم. این روش ذخیره داده در لیست ها بود اما dictionary ها چطور هستند؟

دیکشنری ها به جای ایندکس (index) مفهومی به نام کلید (key) دارند؛ به عبارت دیگر هر دیکشنری حداقل یک key و یک value (کلید و مقدارِ آن کلید) دارد. مثال:

my_dictionary = {
  "first_key" : 100,
  "ROXO" : "Roxo.ir",
  20: "A Number",
  100: 100
}

ما برای تعریف یک لیست از براکت (علامت های []) استفاده می کردیم اما برای تعریف دیکشنری ها از curly brackets یا curly braces (علامت های {}) استفاده می کنیم. در مرحله بعدی باید داده های خود را درون {} ها طبق قالب key:value مشخص کرده و در انتهای هر جفت key:value از یک ویرگول استفاده کنیم. کلیدهای من در دیکشنری بالا "first_key" و "ROXO" و 20 و 100 هستند که به ترتیب مقادیر 100 و "Roxo.ir" و "A Number" و 100 را دارند. هدف من از این مثال این بود که شما متوجه انعطاف پذیری دیکشنری ها بشوید؛ ما می توانیم از مقادیر integer (عدد صحیح)، float (عدد اعشاری)، string (رشته) و boolean به عنوان کلید یک دیکشنری استفاده کنیم اما اجازه استفاده از یک دیکشنری دیگر یا یک لیست به عنوان کلید برای یک دیکشنری را نداریم. در واقع کلیدهای دیکشنری باید immutable (تغییر ناپذیر) باشند اما دیکشنری ها و لیست ها mutable (تغییر پذیر) هستند بنابراین نمی توانیم از آن ها به عنوان کلید استفاده کنید.

البته این قانون فقط برای کلیدهای یک دیکشنری است و برای مقادیر می توانید از هر نوع داده ای استفاده کنید. مثال:

my_dictionary = {
  "first_key" : 100,
  "ROXO" : "Roxo.ir",
  "dictionary": {"my_key": "my_value"},
  100: [1, "Amir", 3.5]
}

در ضمن کلیدهای دیکشنری ها باید یکتا (غیرتکراری) باشند. اگر از این قانون پیروی نکنید، آخرین کلید بقیه کلیدهای همنام را overwrite می کند (جایگزین آن ها می شود):

my_dictionary = {
  "first_key" : 100,
  "first_key" : "THE WINNER",
  "ROXO" : "Roxo.ir",
  "dictionary": {"my_key": "my_value"},
  100: [1, "Amir", 3.5]
}

print(my_dictionary["first_key"])

با اجرای این کد رشته THE WINNER را می گیریم و خبری از 100 نیست.

مسئله بعدی دسترسی به این مقادیر است. چطور می توانیم از طریق یک کلید به مقدار آن دست پیدا کنیم؟ خوشبختانه روش انجام این کار دقیقا مانند دسترسی به لیست ها و با علامت [] می باشد:

my_dictionary = {
  "first_key" : 100,
  "ROXO" : "Roxo.ir",
  "dictionary": {"my_key": "my_value"},
  100: [1, "Amir", 3.5]
}

print(my_dictionary["first_key"])

با اجرای این دستور عدد 100 را دریافت می کنیم. همچنین اگر بخواهیم به یکی از مقادیر درون کلید dictionary دسترسی پیدا کنیم باید از همان روش لیست ها استفاده کنیم:

my_dictionary = {
  "first_key" : 100,
  "ROXO" : "Roxo.ir",
  "dictionary": {"my_key": "my_value"},
  100: [1, "Amir", 3.5]
}

print(my_dictionary["dictionary"]["my_key"])

با اجرای این کد نیز مقدار my_value را دریافت می کنیم. اگر بخواهیم به یکی از مقادیر کلید 100 دسترسی پیدا کنیم چطور؟ مقدار کلید 100 یک لیست است بنابراین می توانیم از ایندکس هایش استفاده کنیم:

my_dictionary = {
  "first_key" : 100,
  "ROXO" : "Roxo.ir",
  "dictionary": {"my_key": "my_value"},
  100: [1, "Amir", 3.5]
}

print(my_dictionary[100][1])

من در این کد گفته ام مقدارِ کلیدِ 100 را دریافت کرده و سپس ایندکس اول (عضو دوم) از آن مقدار را چاپ کن. طبیعتا با اجرای این کد رشته Amir چاپ خواهد شد. با این حساب احتمالا متوجه شده اید که دیکشنری ها تشابه زیادی با لیست ها دارند با این تفاوت که مرتب نشده هستند و داده هایشان بدون هیچ ترتیب خاصی یا ایندکسی در مموری سیستم قرار می گیرد. ما می توانیم خودمان این داده ها را به صورت مرتب شده در یک دیکشنری بنویسیم اما منظور ما از «مرتب نشده» این نیست. مرتب نشده یعنی first_key و ROXO و 100 در مموری در کنار هم نیستند بلکه پخش و پراکنده شده اند.

در ضمن به یاد داشته باشید که ما می توانیم از یک دیکشنری به عنوان یک عضو از لیست ها استفاده کنیم. به مثال زیر توجه کنید:

my_list = [
  {
    "my_key" : "my_value",
    100.4 : "Roxo.ir"
  },
  {
    "something" : "another_thing",
    "new_key" : 313
  },
  150,
  "Amir"
]

print(my_list[0]["my_key"])

در کد بالا یک لیست را داریم که عضو اول و دوم آن از نوع دیکشنری بوده و عوض سوم و چهارم به ترتیب عدد صحیح و رشته هستند. من به راحتی به عضو اول (ایندکس صفر) دسترسی پیدا کرده ام و سپس از درون آن مقدارِ کلیدِ my_key را استخراج کرده ام. با اجرای این دستور مقدار my_value برایتان چاپ می شود.

مهارت یادگیری ۳#

شاید از خودتان بپرسید که چرا داده ساختار های مختلفی مانند لیست ها و دیکشنری ها را داریم؟ آیا بهتر نبود که یک داده ساختار را برای تمام کار ها داشته باشیم؟ همانطور که در این قسمت برایتان توضیح داده ام، داده ساختار های مختلف داده ها را به شکل متفاوتی ذخیره می کنند و هر کدام از این انواع ذخیره سازی در شرایط مختلفی کاربرد دارند. به طور مثال آیا شما از یخچال برای نگهداری کتاب هایتان استفاده می کنید؟ قطعا خیر! داده ساختارها نیز به همین شکل هستند و یادگیری اینکه از چه داده ساختاری در چه موقعیتی استفاده کنید به تجربه نیاز داشته و زمان خواهد برد.

بگذارید برایتان یک مثال بزنم. ما می دانیم که لیست ها مرتب شده و دیکشنری ها مرتب نشده هستند. حالا اگر قرار باشد لیستی از مردم در صف انتظار را در متغیری ذخیره کنید، لیست ها را انتخاب می کنید یا دیکشنری ها را؟ از آنجایی که مردم در صف انتظار ترتیب خاصی را رعایت می کنند بهتر است از لیست ها استفاده کنیم. از طرف دیگر اگر وب سایتی داشته باشیم و در آن داده های کاربران را ذخیره کنیم (نام،‌ شماره تلفن، آدرس و غیره) می توانیم از دیکشنری ها استفاده کنیم چرا که ترتیب آن ها اهمیتی ندارد.

از طرف دیگر می دانیم که دیکشنری ها اطلاعات بیشتری را نسبت به لیست ها ذخیره می کنند. چرا؟ در لیست ها فقط یک ایندکس را داریم که یک مقدار دارد اما در دیکشنری ها خودمان کلیدهایی را تعریف می کنیم که طولانی تر از یک عدد ساده هستند و سپس مقدارش را داریم. با این حساب دیکشنری ها معمولا مقدار بیشتری از حافظه را اشغال می کنند.

در طول این دوره و در طول تجربه شخصی خودتان با مزایا و معایب هر کدام از داده ساختار ها آشنا خواهید شد و یاد می گیرید که در چه موقعیتی از آن ها استفاده کنید اما همانطور که گفتم این کار نیاز به تجربه و تمرین خواهد داشت.

چند متد ساده برای کار با دیکشنری ها

در این قسمت می خواهیم با چند متد ساده برای کار با دیکشنری ها آشنا شویم. فرض کنید دیکشنری وجود داشته باشد اما ما از محتویات داخل آن خبر نداشته باشیم (مثلا یک دیکشنری از یک API برایمان ارسال بشود) و ما بخواهیم وجود یا عدم وجود یک مقدار خاص در آن را بررسی کنیم. به کد زیر توجه کنید:

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

print(user["age"])

ما فرض می کنیم که چنین دیکشنری داشته باشیم اما محتویات آن را نبینیم (فقط یک فرض برای درک مطلب). من می خواهم در این کد به کلید age دسترسی داشته باشم اما دیکشنری user چنین کلیدی ندارد بنابراین با خطا روبرو می شویم:

Traceback (most recent call last):
  File "main.py", line 7, in <module>
    print(user["age"])
KeyError: 'age'

KeyError یعنی خطا مربوط به عدم وجود کلید است. ما با دریافت این خطا متوجه می شویم که age درون این دیکشنری نیست اما اگر یادتان باشد برایتان توضیح داده بودم که ایجاد شدن خطا در برنامه یک موضوع بسیار منفی است و باید تا حد امکان از چنین رخداد هایی جلوگیری کنیم چرا که روند اجرای کدهای ما را متوقف می کنند (در فصل های آینده در مورد خطا ها صحبت خواهیم کرد). برای حل این مشکل متدی به نام get وجود دارد که کلید یک دیکشنری را گرفته و مقدار آن را برمی گرداند:

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

print(user.get('age'))

با اجرای کد بالا به جای خطا، None را دریافت می کنیم که یعنی چنین کلیدی در دیکشنری user وجود ندارد. البته شما می توانید یک مقدار پیش فرض را نیز به get بدهید:

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

print(user.get('age', 25))

کد بالا می گوید مقدارِ کلیدِ age را از دیکشنری user گرفته و به ما بده اما اگر این کلید وجود نداشت مقدار ۲۵ را برگردان! طبیعتا با اجرای این کد ۲۵ را دریافت می کنیم. در صورتی که کلید age در دیکشنری ما وجود داشت به جای ۲۵، مقدارِ آن کلید برگردانده می شد.

البته روش دیگری نیز برای بررسی وجود یک کلید در یک دیکشنری وجود دارد. ما می توانیم از کلیدواژه in نیز استفاده کنیم (قبلا هم در لیست ها از آن استفاده کرده بودیم):

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

print('name' in user)

با اجرای این کد True برایمان چاپ می شود چرا که name در دیکشنری user موجود است.

متد بعدی ما ()dict است که یک دیکشنری جدید را برایمان می سازد. برای ساخت دیکشنری جدید با این متد باید کلید را به صورت نام یک متغیر (رشته نباشد) پاس بدهید و سپس مقدار آن کلید را به هر صورتی که می خواهید پاس می دهید. بین این دو نیز به جای علامت : از علامت = استفاده می کنید. به مثال زیر توجه کنید:

new_user = dict(name = "Ahmad")

print(new_user)

ما در این مثال یک دیکشنری جدید را ساخته و در متغیری به نام new_user قرار داده ایم. حالا با اجرای این کد نتیجه زیر را می گیریم:

{'name': 'Ahmad'}

متد بعدی ما keys نام دارد که تمام کلیدهای موجود در یک دیکشنری را برای ما برمی گرداند. به کد ساده زیر توجه کنید:

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

print(user.keys())

با اجرای این کد نتیجه زیر برایتان چاپ می شود:

dict_keys(['name', 'website', 'occupation'])

از طرف دیگر متد دیگری به نام values را داریم که به جای برگرداندن تمام کلیدها، تمام مقادیر را برمی گرداند. مثال:

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

print(user.values())

حتما حدس می زنید که نتیجه اجرای این کد به شکل زیر است:

dict_values(['Amir', 'roxo.ir', 'Developer'])

حدستان درست است! حالا می توانیم این متد را با اپراتور in ترکیب کنیم تا وجود یک مقدار خاص در مقادیر دیکشنری را بررسی کنیم:

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

print("Amir" in user.values())

با اجرای این دستور نتیجه True را می گیریم چرا که Amir در مقادیر این دیکشنری وجود دارد. در ضمن ما می توانستیم این کار را با کلیدها نیز انجام بدهیم اما نتیجه همان نتیجه ای می شد که قبلا دیدیم:

print("name" in user.keys())
print("name" in user)

هر دو خط کد بالا دقیقا یک کار را انجام می دهد و از آنجایی خط دوم خلاصه تر است من آن را ترجیح می دهم. متد بعدی ما items است که به جای دریافت یک کلید یا یک مقدار، هر دو را با هم دریافت می کند:

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

print(user.items())

نتیجه اجرای این کد به شکل زیر است:

dict_items([('name', 'Amir'), ('website', 'roxo.ir'), ('occupation', 'Developer')])

ما آیتم های این دیکشنری را دریافت کرده ایم اما این ساختار برایمان ناشناخته است. به ساختار بالا یک Tuple می گوییم که هنوز با آن آشنا نشده ایم و در جلسه بعدی این کار را انجام خواهیم داد.

متد بعدی ما clear است که باعث پاک شدن تمام اعضا و خالی شدن دیکشنری می شود. مثال:

user.clear()

متد بعدی copy است و اگر از قسمت لیست ها به یاد داشته باشید، کارش کپی کردن یک لیست یا دیکشنری است:

another_user = user.copy()

متد بعدی pop است که یک کلید را گرفته و مقدارش را حذف می کند:

user.pop('name')

امیدوارم یادتان باشد که pop مقدار حذف شده را برمی گرداند بنابراین می توانید آن را print کنید. متد دیگری به نام popitem نیز وجود دارد که به صورت تصادفی یکی از اعضای دیکشنری را حذف می کند اما استفاده زیادی ندارد.

متد بعدی ما update است که کارش به روز رسانی یک دیکشنری است. به مثال زیر توجه کنید:

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

print(user.update({'age': 25}))

print(user)

برای به روز رسانی یک دیکشنری باید update را صدا زده و حتما علامت های {} را به آن پاس بدهید، سپس درون این علامت ها فیلدی که باید ویرایش شود را ذکر کنید. من age را برابر ۲۵ گذاشته ام. اگر کلید age در دیکشنری user وجود داشته باشد، مقدارش به ۲۵ تغییر می کند اما اگر وجود نداشته باشد age به عنوان یک آیتم جدید به دیکشنری اضافه می شود. با اجرای این کد نتیجه زیر را می گیریم:

None
{'name': 'Amir', 'website': 'roxo.ir', 'occupation': 'Developer', 'age': 25}

بنابراین خود دستور update چیزی را برنمی گرداند (none) اما دیکشنری ما به روز شده است. حالا بیایید نام کاربر را تغییر بدهیم:

user = {
  "name" : "Amir",
  "website" : "roxo.ir",
  "occupation" : "Developer"
}

user.update({'name': "Ahmad"})

print(user)

نتیجه:

{'name': 'Ahmad', 'website': 'roxo.ir', 'occupation': 'Developer'}

به همین سادگی! در جلسه آینده به سراغ انواع داده های دیگر مانند tuple ها و set ها می رویم.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری پایتون حرفه‌ای توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.