در زبان برنامه نویسی پایتون میتوان از انواع ساختارهای دادهای متفاوت برای سازماندهی دادهها استفاده کرد. دو نوع داده (Data Type) رایج در پایتون، «لیست» (List) و «دیکشنری» (Dictionary) هستند که هر کدام از آنها کاربرد و ویژگی خاص خود را دارند. برنامه نویس در پروژههای برنامه نویسی بنا به نیاز خود میتواند هر یک از این ساختار دادهها را به یکدیگر تبدیل کند. در مقاله حاضر، پس از معرفی مختصر دو نوع ساختار داده لیست و دیکشنری، به انواع روشهای مختلف برای تبدیل لیست به دیکشنری در پایتون پرداخته میشود.
نوع داده لیست در پایتون چیست ؟
نوع داده لیست، یکی از رایجترین و پرکاربردترین ساختارهای داده پایتون است که از آن میتوان برای ذخیره مقادیر مختلف به صورت متوالی استفاده کرد. لیست در پایتون، مشابه ساختار داده «آرایه» (Array) در سایر زبانهای برنامه نویسی است؛ با این حال، برخلاف آرایه، لیستهای پایتون میتوانند مقادیری با انواع داده مختلف را ذخیره کنند. ساختار داده لیست در پایتون دارای ویژگیهایی است که در ادامه فهرست شدهاند:
- قابل ویرایش بودن مقادیر درون لیست پس از تعریف ساختار داده لیست
- قابلیت اندیسگذاری برای مقادیر درون لیست بهمنظور حفظ ترتیب مقادیر و دسترسی به آنها
- قابلیت ذخیره مقادیر تکراری برخلاف سایر ساختارهای داده پایتون نظیر دیکشنری و «مجموعه» (Set)
- قابلیت ایجاد ساختار دادههای تودرتو درون لیست
در زبان پایتون میتوان از «قلاب» (براکت | کروشه) یعنی «[ ]» برای تعریف لیست استفاده کرد. هر یک از آیتمهای درون لیست نیز با علامت ویرگول انگلیسی (کاما) از یکدیگر جدا میشوند و با اندیس میتوان به آیتمهای لیست دسترسی داشت. در مثال زیر، نمونهای از لیست با دادههای متفاوت ملاحظه میشود:
# Create a new list
list_example = ["name", "python", "version", 3.9]
نوع داده دیکشنری در پایتون چیست ؟
ساختار داده دیکشنری به عنوان یکی دیگر از انواع داده پرکاربرد در پایتون محسوب میشود. میتوان از دیکشنری بهمنظور ذخیره آیتمها به شکل جفتی از «کلید» (Key) و «مقدار» (Value) استفاده کرد. ساختار داده دیکشنری پایتون دارای ویژگیهای مختلفی است که در ادامه فهرست شدهاند:
- ذخیره آیتمهای دیکشنری بدون لحاظ کردن ترتیب
- دسترسی به مقادیر دیکشنری با استفاده از کلید
- عدم استفاده از مقادیر تکراری برای کلیدهای دیکشنری
- استفاده از ساختار دادههای مختلف برای تعریف کلیدهای دیکشنری
بهمنظور تعریف دیکشنری در پایتون از علامت آکولاد ({} ) استفاده میشود. هر یک از آیتمهای درون دیکشنری (یعنی جفتهای کلید و مقدار) نیز با کاما از یکدیگر جدا میشوند و برای نگاشت کلید دیکشنری به مقدار آن میتوان از علامت دونقطه «:» استفاده کرد. در مثال زیر، نمونهای از تعریف دیکشنری ملاحظه میشود:
# Create a new dictionary
dict_a = {"Param1": "value1", "Param2": "value2"}
print('dict_a: ', dict_a)
# Create a new dictionary with tuple keys
dict_b = {(1, 10): "value1", (1,20): "value2"}
print('dict_b: ' , dict_b)
خروجی قطعه کد فوق، به صورت زیر است:
dict_a: {'Param1': 'value1', 'Param2': 'value2'}
dict_b: {(1, 10): 'value1', (1, 20): 'value2'}
روش های تبدیل لیست به دیکشنری در پایتون کدامند ؟
در پروژههای برنامه نویسی ممکن است نیاز باشد نوع دادهها تغییر کنند. در مطالب قبلی، تبدیل دیکشنری به لیست در پایتون را توضیح دادیم. یکی دیگر از پرکاربردترین فرایندهای تبدیل دو ساختار داده، تبدیل لیست به دیکشنری در پایتون است که در طی آن میتوان آیتمهای لیست را به جفت مقادیر کلید-مقدار تبدیل کرد. بهمنظور تبدیل لیست به دیکشنری در پایتون میتوان از روشهای مختلفی نظیر استفاده از متدهای دیکشنری، حلقه، توابع و کتابخانههای پایتون استفاده کرد. حالتها و روشهایی که میتوان بهمنظور تبدیل لیست به دیکشنری در پایتون درنظر گرفت، در ادامه فهرست شدهاند:
- استفاده از حلقه For برای تبدیل لیست به دیکشنری
- استفاده از تابع Zip()
بهمنظور تبدیل لیست به دیکشنری در پایتون
- تبدیل لیست به دیکشنری با استفاده از روش «برش» (Slicing)
- استفاده از دستور enumerate()
برای تغییر لیست پایتون به دیکشنری
- تبدیل لیست به دیکشنری در پایتون با استفاده از dict.fromkeys()
- تبدیل لیستی از «تاپلها» (Tuples) به دیکشنری
- تبدیل دو لیست به دیکشنری در پایتون
- تبدیل دو لیست با طول یکسان به دیکشنری
- استفاده از حلقه For برای تبدیل دو لیست با طول یکسان به دیکشنری
- تبدیل دو لیست با طول یکسان به دیکشنری با استفاده از تابع Zip()
- تبدیل دو لیست با طولهای متفاوت به دیکشنری
- تبدیل دو لیست با طول یکسان به دیکشنری
- تبدیل لیستی از دیکشنریها به دیکشنری
- استفاده از dict.update()
- استفاده از Dictionary Comprehension
- استفاده از Collenctions.ChainMap
در ادامه مطلب، پس از معرفی مجموعه فیلمهای آموزش پایتون، به توضیح هر یک از حالتها و روشهای ذکر شده در فوق به همراه مثال اشاره میشود.
معرفی فیلم های آموزش پایتون
تم آف برای علاقهمندان به یادگیری برنامه نویسی پایتون مجموعهای از دورههای آموزشی جامع و کاربردی را فراهم کرده است. دورههای گردآوری شده در مجموعه آموزش پایتون، فیلمهای آموزشی مقدماتی تا پیشرفته و پروژهمحور زبان پایتون را شامل میشوند. افراد میتوانند از دورههای جامع پایتون در راستای تقویت مهارت برنامه نویسی خود استفاده کنند و از آموزشهای پروژهمحور تم آف بهره بگیرند. در تصویر فوق تنها برخی از دورههای آموزشی مجموعه آموزش پایتون تم آف مشاهده میشوند.
- برای دسترسی به همه آموزش های پایتون تم آف + اینجا کلیک کنید.
تبدیل لیست به دیکشنری در پایتون با استفاده از حلقه For
از حلقه For میتوان برای تبدیل نوع داده لیست به دیکشنری استفاده کرد. میتوان این حلقه را به صورت ساده یا با استفاده از List Comprehension به کار برد. در قطعه کد زیر، نمونهای از کاربرد List Comprehension برای تبدیل لیست به دیکشنری در پایتون ملاحظه میشود.
# Using For loop for converting a list to a dictionary
m = ["frog", "dog", "Goat", "cat"]
d = {m[a]:m[a + 1] for a in range(0, len(m), 2)}
print(d)
خروجی قطعه کد فوق، به صورت زیر است:
Output: {'frog': 'dog', 'Goat': 'cat'}
تبدیل لیست به دیکشنری در پایتون با استفاده از تابع Zip()
میتوان به جای حلقه For از تابع Zip()
برای تبدیل لیست به دیکشنری در پایتون استفاده کرد. این روش، سادهتر و بهینهتر از روش قبلی است. در قطعه کد زیر، مثالی از کاربرد تابع Zip()
برای تبدیل لیست به دیکشنری ملاحظه میشود.
# Using Zip function for converting a list to a dictionary
a = iter(m) # spin up an iterator on the list
result = dict(zip(a, a)) # Convert the iterated items into key-value pairs
print(result)
خروجی قطعه کد فوق، به صورت زیر است:
Output: {'frog': 'dog', 'Goat': 'cat'}
چنانچه تعداد آیتمهای درون لیست، فرد باشد، تابع Zip()
آیتمی را نادیده میگیرد که بدون جفت باقی میماند. به عنوان مثال، اگر طول لیست، برابر با 5 باشد، تابع Zip()
پنجمین آیتم لیست را نادیده گرفته و فقط برای چهار آیتم اول لیست، تاپل ایجاد میکند. در قطعه کد زیر، مثالی از توضیح ارائه شده ملاحظه میشود.
# Using Zip function for converting a list to a dictionary
m = ["first", "second", "third", "fourth", "fifth_odd"]
a = iter(m)
result = dict(zip(a, a))
print(result)
خروجی قطعه کد فوق، به صورت زیر است:
Output: {'first': 'second', 'third': 'fourth'}
تبدیل لیست پایتون به دیکشنری با برش زدن (Slicing)
برش (Slicing) لیست جدیدی را با استفاده از لیست تعریف شده از قبل، ایجاد میکند. به عبارتی، میتوان با استفاده از مشخص کردن بازه اندیسها و گامها، برخی از آیتمهای لیست را به صورت زیر استخراج کرد.
list[i:j:k] — slice of list from i to j with step k
در مثال زیر، نحوه استفاده از روش برش برای تبدیل لیست به دیکشنری در پایتون ملاحظه میشود. در این مثال، لیستی با عنوان l1
تعریف شده است که با استفاده از روش برش، دو لیست جدید با عنوانهای l2
و l3
از روی لیست l1
ایجاد میشوند. آیتمهای لیست l2
به عنوان کلیدها و آیتمهای لیست l3
به عنوان مقادیر کلیدها در نظر گرفته شدهاند. در نهایت، با استفاده از تابع Zip()
، تاپلهایی از جفت آیتمهای l2
و l3
ایجاد شده که در نهایت با دستور dict()
به جفت مقادیر کلید-مقدار تبدیل میشوند.
l1 = [1,'a',2,'b',3,'c',4,'d']
#Creating list containing keys alone by slicing
l2 = l1[::2]
#Creating list containing values alone by slicing
l3 = l1[1::2]
#merging two lists uisng zip()
z = zip(l2,l3)
#Converting zip object to dict using dict() constructor.
print (dict(z))
خروجی قطعه کد فوق، به صورت زیر است:
Output:{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
تبدیل لیست پایتون به دیکشنری با استفاده از دستور Enumerate()
از تابع enumerate()
میتوان برای تبدیل لیست به دیکشنری در پایتون استفاده کرد. با استفاده از این دستور، به تعداد آیتمهای لیست، اندیسهایی (با شروع از مقدار صفر) ایجاد میشوند که میتوان با استفاده از دستور dict()
، اندیسها را به کلید و آیتمهای لیست را به مقادیر کلیدها تبدیل کرد. در قطعه کد زیر، نحوه استفاده از دستور enumerate()
برای تبدیل لیست به دیکشنری در پایتون ملاحظه میشود.
# Using Enumerate function for converting a list to a dictionary
l1 = ['a','b','c','d']
d1 = dict(enumerate(l1))
print (d1)
خروجی قطعه کد فوق، به صورت زیر است:
Output:{0: 'a', 1: 'b', 2: 'c', 3: 'd'}
تبدیل لیست به دیکشنری در پایتون با استفاده از dict.fromkeys()
پارامترهای ورودی دستور dict.fromkeys()
، لیستی از کلیدها و مقدار خاصی برای تخصیص به کلیدها هستند. به عبارتی، با استفاده از این دستور میتوان مقدار یکسانی را به لیستی از کلیدها اختصاص داد. در قطعه کد زیر، مثالی از نحوه کاربرد دستور dict.fromkeys()
برای تبدیل لیست به دیکشنری در پایتون ملاحظه میشود.
# Using dict.fromkeys() for converting a list to a dictionary
l1 = ['red','blue','orange']
d1 = dict.fromkeys(l1,"colors")
print (d1)
خروجی قطعه کد فوق، به صورت زیر است:
#Output:{'red': 'colors', 'blue': 'colors', 'orange': 'colors'}
تبدیل لیستی از تاپلها به دیکشنری
چنانچه لیستی از تاپلها تعریف شده باشد، میتوان با دستور dict()
بهراحتی و مستقیماً یک دیکشنری با جفت مقادیر کلید-مقدار ایجاد کرد. مثال زیر، روش تبدیل لیست به دیکشنری را با استفاده از دستور dict()
و لیستی از تاپلها نشان میدهد.
# Converting list of tuples to dictionary by using dict() constructor
color = [('red',1),('blue',2),('green',3)]
d = dict(color)
print(d)
خروجی قطعه کد فوق، در ادامه آمده است:
Output:{'red': 1, 'blue': 2, 'green': 3}
تبدیل دو لیست به دیکشنری در پایتون
چنانچه نیاز باشد دو لیست پایتون را به یک دیکشنری تبدیل کرد، در ابتدا باید بررسی کرد که آیا طول دو لیست، یکسان هستند یا طول مختلفی دارند. روشهای مجزایی برای تبدیل دو لیست با طول مشابه و مغایر وجود دارد که در ادامه فهرست شدهاند:
- تبدیل دو لیست با طول یکسان به دیکشنری
- استفاده از حلقه For برای تبدیل دو لیست با طول یکسان به دیکشنری
- تبدیل دو لیست با طول یکسان به دیکشنری با استفاده از تابع Zip()
- تبدیل دو لیست با طولهای متفاوت به دیکشنری
- استفاده از تابع Zip_Longest()
برای تبدیل دو لیست با طولهای متفاوت به دیکشنری
- استفاده از تابع Zip_Longest()
در ادامه، به توضیح هر یک از روشهای فوق به همراه مثالی از پایتون پرداخته میشود.
تبدیل دو لیست با طول یکسان به دیکشنری
بهمنظور تبدیل دو لیست با طول یکسان به دیکشنری در پایتون میتوان از دو روش حلقه For و تابع Zip()
استفاده کرد که در ادامه با ارائه مثال به آنها پرداخته میشود.
استفاده از حلقه For برای تبدیل دو لیست با طول یکسان به دیکشنری
با استفاده از حلقه For میتوان آیتمهای درون دو لیست با طول یکسان را به جفت مقادیر کلید-مقدار تبدیل کرد. در قطعه کد زیر، نحوه استفاده از این روش در قالب مثال ملاحظه میشود.
# Converting 2 lists with the same length to a dictionary by For loop
list1 = ["frog","dog", "Goat", "cat", "jog"]
list2 = [1, 3, 24, 56
result = {list2[a]:list1[a] for a in range(len(list2))}
print(result)
خروجی قطعه کد فوق، به صورت زیر است:
Output: {1: 'frog', 3: 'dog', 24: 'Goat', 56: 'cat'}
استفاده از تابع Zip() برای تبدیل دو لیست با طول یکسان به دیکشنری
چنانچه دو لیست با طول یکسان وجود داشته باشند، میتوان با استفاده از تابع Zip()
یک دیکشنری جدید با مقادیر دو لیست ایجاد کرد. خروجی تابع Zip()
مجموعهای از تاپلها است. با استفاده از دستور dict()
میتوان خروجی Zip()
را به دیکشنری تبدیل کرد. در قطعه کد زیر، مثالی از تابع Zip()
برای تبدیل لیست به دیکشنری در پایتون ملاحظه میشود.
# Converting 2 lists with the same length to a dictionary by Zip function
l1 = [1,2,3,4]
l2 = ['a','b','c','d']
d1 = zip(l1,l2)
#Converting zip object to dict using dict() contructor.
print (dict(d1))
خروجی قطعه کد فوق، به صورت زیر است:
Output:{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
تبدیل دو لیست با طولهای متفاوت به دیکشنری
بهمنظور تبدیل دو لیست با طولهای متفاوت به دیکشنری در پایتون میتوان از تابع Zip_Longest()
استفاده کرد. این تابع به صورت پیشفرض به کلیدهایی که مقدار ندارند، مقدار None را اختصاص میدهد. در مثال زیر، نحوه کاربرد تابع Zip_Longest()
بهمنظور تبدیل لیست به دیکشنری در پایتون ملاحظه میشود.
# Converting 2 lists different lengths to a dictionary by Zip_Longest function
from itertools import zip_longest
list1 = ["Cat", "Dogs", "Rats", "Fruits", "ducks"]
list2 =[1, 4, 6]
a = dict(zip_longest(list1, list2))
print(a)
خروجی قطعه کد فوق، به صورت زیر است:
Output: {'Cat': 1, 'Dogs': 4, 'Rats': 6, 'Fruits': None, 'ducks': None}
تابع Zip_Longest()
دارای پارامتری با عنوان fillvalue
است که با استفاده از آن میتوان مقدار پیشفرض کلیدهایی را مشخص کرد که دارای مقدار نیستند. در قطعه کد زیر، مقدار 10 برای کلیدهای Fruits و Ducks درنظر گرفته شده است.
a = dict(zip_longest(list1, list2, fillvalue="10"))
print(a)
خروجی قطعه کد فوق، در ادامه ملاحظه میشود.
Output: {'Cat': 1, 'Dogs': 4, 'Rats': 6, 'Fruits': '10', 'ducks': '10'}
نحوه تبدیل لیستی از دیکشنری ها به دیکشنری در پایتون چگونه است ؟
بهمنظور تبدیل لیستی از دیکشنریها به یک دیکشنری در پایتون میتوان از سه روش استفاده کرد:
- استفاده از dict.update()
- استفاده از Dictionary Comprehension
- استفاده از Collenctions.ChainMap
در ادامه، به نحوه استفاده از هر سه روش ذکر شده در بالا به همراه مثال پرداخته میشود.
تبدیل لیستی از دیکشنریها به دیکشنری با استفاده از dict.update()
با استفاده از حلقه For بهمنظور پیمایش آیتمهای لیست و دستور dict.update()
میتوان مقادیر لیست را در دیکشنری جدیدی ذخیره کرد. در مثال زیر، نمونهای از کاربرد دستور dict.update()
برای تبدیل لیست به دیکشنری در پایتون ملاحظه میشود.
# Converting a list of dictionaries to a dictionary by dict.update()
l1 = [{1:'a',2:'b'},{3:'c',4:'d'}]
d1={}
for i in l1: d1.update(i)
print (d1)
خروجی قطعه کد فوق، به صورت زیر است:
Output:{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
تبدیل لیستی از دیکشنریها به دیکشنری با استفاده از Dictionary Comprehension
بهمنظور تبدیل لیستی از دیکشنریها به دیکشنری در پایتون میتوان از Dictionary Comprehension استفاده کرد. در مثال زیر، نحوه استفاده از این روش ملاحظه میشود.
# Converting a list of dictionaries to a dictionary by Dictionary Comprehension
l1 = [{1:'a',2:'b'},{3:'c',4:'d'}]
d1 = {k:v for e in l1 for (k,v) in e.items()}
print(d1)
خروجی قطعه کد فوق، به صورت زیر است:
Output:{1: 'a', 2: 'b', 3: 'c', 4: 'd'}
در قطعه کد فوق، دستور for e in l1
پیمایشی بر روی لیست l1 انجام میدهد و آیتمهای لیست l1 را برمیگرداند. دستور for (k,v) in e.items()
نیز جفت کلید-مقدار دیکشنری درون لیست را به خروجی بازمیگرداند.
کاربرد Collenctions.ChainMap برای تبدیل لیستی از دیکشنریها به دیکشنری
با استفاده از کتابخانه Collections میتوان لیستی از دیکشنریها را به یک دیکشنری در پایتون تبدیل کرد. در قطعه کد زیر، میتوان نحوه استفاده از این کتابخانه را در قالب مثال ملاحظه کرد.
# Converting a list of dictionaries to a dictionary by Collections Library
l1 = [{1:'a',2:'b'},{3:'c',4:'d'}]
from collections import ChainMap
d3 = ChainMap(*l1)
print (d3) # Converting ChainMap object to dict using dict() constructor.
print(dict(d3))
خروجی قطعه کد فوق، به صورت زیر است:
Output:ChainMap({1: 'a', 2: 'b'}, {3: 'c', 4: 'd'}) Output:{3: 'c', 4: 'd', 1: 'a', 2: 'b'}
نوع خروجی دستور ChainMap شئ ChainMap Object است که میتوان آن را با دستور dict()
به دیکشنری تبدیل کرد.
تبدیل لیست های تودرتو به دیکشنری در پایتون با Dictionary Comprehension
میتوان لیستهای تودرتو را با روش Dictionary Comprehension به دیکشنری پایتون تبدیل کرد. در مثال زیر، نحوه استفاده از این روش برای تبدیل لیست به دیکشنری در پایتون ملاحظه میشود.
# Converting a nested list to a dictionary by Collections Library
l1 = [[1,2],[3,4],[5,[6,7]]]
d1 = {x[0]:x[1] for x in l1}
print(d1)
خروجی قطعه کد فوق، به صورت زیر است:
Output:{1: 2, 3: 4, 5: [6, 7]}
تبدیل لیست به دیکشنری در پایتون با Counter
با استفاده از کتابخانه Collections و کلاس Counter()
میتوان لیست را به دیکشنری تبدیل کرد. کلاس Counter()
بهمنظور شمارش آیتمهای یکتای لیست استفاده میشود. به عبارتی، کلاس Counter()
لیست را به جفت مقادیر کلید و بسامد کلید در لیست تبدیل میکند. در قطعه کد زیر، نحوه استفاده از این کلاس برای تبدیل لیست به دیکشنری در پایتون ملاحظه میشود.
# Converting a list to a dictionary by Counter Class from Collections Library
from collections import Counter
c1 = Counter(['c','b','a','b','c','a','b']) # key are elements and corresponding values are their frequencies
print(c1)
print(dict(c1))
خروجی قطعه کد فوق، به صورت زیر است:
Output:Counter({'b': 3, 'c': 2, 'a': 2}) Output:{'c': 2, 'b': 3, 'a': 2}
جمعبندی
دیکشنری پایتون یکی از انواع ساختار دادهای است که دسترسی به آیتمهای ذخیره شده را ساده میکند. به همین دلیل، در بسیاری از پروژههای برنامه نویسی نیاز است که از این ساختار داده استفاده شود یا انواع دیگر ساختار دادهها را به دیکشنری تبدیل کرد. در مقاله حاضر با عنوان «تبدیل لیست به دیکشنری در پایتون — از صفر تا صد و رایگان» ضمن توضیح انواع روشهای تبدیل لیست به دیکشنری، برای هر یک از این روشها مثالهایی کاربردی ارائه شد.