دیکشنری در زبان برنامه نویسی پایتون یک نوع دادهای محبوب و نسبتاً پر کاربرد است. این نوع دادهای در اصل یک نوع لیست انجمنی (Associative) یا لیست کلید-مقدار (key-value) هست. در این آموزش به طور جامع کار با دیکشنری در پایتون را یاد میگیریم.
معمولاً از دیکشنری پایتون در جاهایی استفاده میکنیم که نیاز داریم مقادیری را با استفاده از یک کلید مرتبط با هر کدام از آنها شناسایی کنیم. این مقادیر هر چیزی میتوانند باشند؛ برای مثال، رشته متنی، عدد، شء و … .
در ابتدا به این موضوع میپردازیم که دیکشنری در پایتون چیست و پس از آن یک دیکشنری ساخته و کار با دیکشنری پایتون را خواهیم آموخت. همچنین در انتها در مورد نوع کلیدها و مقادیر بیشتر صحبت کرده و چند ترفند کاربردی را با هم مرور میکنیم.
دیکشنری (Dictionary) در زبان فارسی معادل فرهنگ لغت یا واژهنامه است. در یک کتاب فرهنگ لغت، یک کلمه با معادلش مرتبط میشود. این معادل میتواند یکی بوده یا چندین مورد باشد، اما کلمه اصلی یکی است! در اصل یک یا چند معنی معادل را به یک کلمه مرتبط کردهایم.
در دیکشنری پایتون هم دقیقاً مشابه چنین کاری را انجام میدهیم؛ یک کلمه (که آن را به عنوان کلید میشناسیم) با یک مقدار (string، عدد، رفرنس شئ و …) مرتبط خواهد شد.
برای عضویت در دوره ویدئویی میتونید به «دوره جامع پایتون در کالج» مراجعه کنید. با ثبتنام رایگان در دوره، به تمام جلسات اصلی، جلسات تکمیلی، تمرینها، آزمونها و منابع مازاد دسترسی کامل خواهید داشت.
فهرست محتوای آموزش
ساخت دیکشنری در پایتون
یک دیکشنری با علامت {
شروع شده و با }
خاتمه مییابد. اعضای کی دیکشنری به صورت کلید و مقدار (key value) در درون آن تعریف شده و مشابه سایر ساختارهای رایج ذخیرهسازی در پایتون، با استفاده از کاما (,
) از یکدیگر جدا میشوند.
برای مثال فرض کنید میخواهیم مشخصات فردی را درون یک دیکشنری داشته باشیم؛ دیکشنری را به صورت زیر تعریف میکنیم.
person = {
"name": "hesam",
"job": "graphist",
"car": "BMW x6",
"age": 24,
"code": 134
}
به همین سادگی توانستیم یک دیکشنری حاوی اطلاعات فردی به نام hesam را ایجاد کنیم!
تعداد عناصر موجود در یک دیکشنری پایتون نامحدود است. ما میتوانیم یک دیکشنری با هزاران عنصر داشته یا فقط درون آن یک عنصر را نگهداری کنیم. فقط باید قوانین تعریف کلید و مقدار برای آنها رعایت شود. (که در انتهای مقاله در مورد آن بحث میکنیم.)
ساخت دیکشنری با سازنده dict
برای ایجاد دیکشنری میتوان از سازنده (Constructor) آن نیز استفاده کرد. به این منظور تابع dict()
را صدا زده و تمام کلیدها و مقادیر آنها را به صورت پارامترهای جداگانه به عنوان ورودی به تابع میدهیم.
person = dict( name="hesam", job="graphist", car="BMW x6", age=24, code=134 )
نتیجه ذخیره شده در متغیر person
نیز مشابه حالت قبل است. در حقیقت تفاوت خاصی در دیکشنری ایجاد شده در این دو حالت وجود ندارد. شما میتوانید با هر روشی که راحتتر هستید از آنها استفاده کنید.
البته همانطور که میدانید، گاهی اوقات شرایط برنامه و موقعیتهای پیش رو نحوه استفاده از آن را برای ما تعیین میکند.
کار با دیکشنری در پایتون
تا به این جای کار توانستیم یک دیکشنری در پایتون بسازیم. قطعاً لازم است بتوانیم با عناصر موجود در آن عملیاتهایی انجام داده تا برنامه خود را پیش ببریم. در ادامه روشهای کار با عناصر دیکشنری را میخوانیم.
دسترسی به مقادیر دیکشنری
برای دسترسی به مقادیر (عناصر) ذخیرهشده در دیکشنری، دو راه وجود دارد.
راه اول و سادهترین راهحل مشابه دسترسی به خانههای یک لیست در پایتون است. به این صورت که با استفاده از علامت []
میتوان به تک تک عناصر دسترسی داشت؛ با این تفاوت که به جای مقدار عددی برای اَندیس، از مقدار کلیدها به عنوان ایندکس استفاده خواهیم کرد.
اگر در دیکشنریای که ابتدای کار ساختیم بخواهیم به نام فرد دسترسی پیدا کنیم، به صورت زیر عمل خواهیم کرد.
print( "Name: " + person["name"] )
خروجی قطعه کد بالا چیزی شبیه زیر خواهد شد:
Name: hesam
راهکار دوم برای دسترسی به مقدار یک کلید در دیکشنری پایتون، استفاده از تابع get()
روی دیکشنری است. این تابع یک ورودی میگیرد که همان کلید مورد نظر ماست و سپس مقدار مرتبط با کلید را بازمیگرداند.
print( "Name: " + person.get("name") )
# output: Name: hesam
خطای KeyError در دیکشنری پایتون
اگر در هنگام فراخوانی یک مقدار از دیکشنری، کلیدی را صدا بزنیم که وجود نداشته باشد، با خطایی از نوع KeyError مواجه خواهیم شد. (یادگیری بیشتر: مدیریت خطا در پایتون)
info = {'name': 'omid', 'job': 'programmer', 'code': 177}
print( info['name'] )
print( info['family'] )
# omid
# KeyError: 'family'
تغییر مقادیر دیکشنری در پایتون
برای بهروزرسانی مقدار هر یک از کلیدها مشابه تخصیص مقدار به ایندکسهای مختلف یک لیست عمل میکنیم.
در قطعه کد زیر، مقدار 23 را در کلید age
از دیکشنری person
قرار دادهایم.
person["age"] = 23
همانطور که احتمالاً درست حدس زدهاید، میتوان برای بهروزرسانی مقدار یک کلید در دیکشنری از همان مقدار یا مقدارهای دیگر درون آن دیکشنری نیز استفاده کرد.
مثلاً در مثال زیر، سن فعلی کاربر را به اندازه یک واحد افزایش میدهیم.
person["age"] = person["age"] + 1
افزودن عنصر جدید به دیکشنری پایتون
افزودن عضو جدید به دیکشنری در پایتون بسیار آسان و ساده است. برای این کار، مشابه تغییر مقدار یک کلید در دیکشنری عمل میکنیم، با این تفاوت که کلید صدا زده شده، کلید جدید و مقداری که به آن تخصیص مییابد مقدار مورد نظرمان خواهد بود.
person["mobile"] = "Samsung Galaxy Note 7"
حذف عناصر از دیکشنری
برای حذف یک کلید و مقدار مرتبط با آن، دو روش خواهیم داشت.
روش اول استفاده از دستور del
است. در جلوی این دستور کلید مورد نظر در دیکشنری را فراخوانی میکنیم.
print( person )
del person["mobile"] # delete 'mobile' key in dictionary
print( person )
در خروجی قطعه کد بالا، در پرینت دوم میبینیم که کلید mobile و مقدار مربوط به آن از درون دیکشنری حذف شده است.
{'name': 'hesam', 'job': 'graphist', 'car': 'BMW x6', 'age': 24, 'code': 134, 'mobile': 'Samsung Galaxy Note 7'} {'name': 'hesam', 'job': 'graphist', 'car': 'BMW x6', 'age': 24, 'code': 134}
روش دوم برای حذف یک المان از دیکشنری استفاده از متد pop()
در دیکشنری پایتون است. این تابع به صورت متد روی دیکشنری مورد نظر صدا زده شده و یک ورودی میگیرد.
ورودی آن همان مقدار کلید مورد نظر ماست که میخواهیم از دیکشنری حذف کنیم.
person.pop("car")
حذف کل دیکشنری در پایتون
گاهی لازم است تا کل دیکشنری را حذف کنیم. منظور از کل دیکشنری، حذف تمام کلیدها و مقدارها و پس از آن حذف متغیر دیکشنری است.
برای این کار کافی است تا نام دیکشنری را در مقابل دستور del
بنویسیم. با این کار کل دیکشنری حذف خواهد شد.
del person # delete person dictionary object
حذف تمام عناصر دیکشنری
اما گاهی نیاز است که صرفاً دیکشنری را خالی کنیم؛ یعنی بدون حذف خود دیکشنری، فقط کلیدها و مقدارها را حذف کنیم. برای این کار متد clear()
را روی شیء دیکشنری صدا میزنیم.
با صدا زدن این تابع، تمام کلیدهای موجود در دیکشنری حذف شده و در نهایت یک دیکشنری خالی خواهیم داشت.
person.clear() # delete all keys in Dictionary
print( person )
# output: {}
قوانین تعریف کلید و مقدار در دیکشنری پایتون
کلیدهای دیکشنری در پایتون باید دو ویژگی اصلی داشته باشند.
- یکتا باشند (تکراری نباشند)
- تغییرناپذیر باشند.
مورد اول که تقریباً واضح است. در حقیقت به ازای هر کلید در دیکشنری نمیتوان بیشتر از یک مقدار داشت. در صورتی که یک کلید دو بار در دیکشنری تعریف شود، مقدار دوم آن جایگزین اولی شده و همواره مقدار دوم را خواهیم داشت. (به نوعی تغییر مقدار صورت میگیرد)
در مورد دومین قانون، کلید را به عبارتی هویت مقدار (value) مرتبط با آن میدانند. میدانیم که هویت را نمیتوان تغییر داد. بنابراین کلیدها در دیکشنری پایتون میبایست یک مقدار تغییرناپذیر باشند. در نتیجه نمیتوان از یک متغیر به عنوان کلید استفاده کرد.
برای مقادیر متناظر با کلیدها در دیکشنری هیچ گونه محدودیتی نداریم. این مقادیر میتوانند تکراری بوده یا از هر نوع دادهای مختلفی (نظیر رشته متنی پایتون، عدد، شیء پایتون، شئ تعریف شده توسط کاربر و …) باشند؛ در نتیجه میتوانند تغییرپذیر نیز باشند.
کپی کردن دیکشنری در پایتون
همانطور که میدانید، متغیرهایی که به اشیاء اشاره میکنند حاوی رفرنسی به آن شئ هستند. پس اگر یک دیکشنری را با استفاده از علامت تخصیص (=
) به متغیر دیگری بدهیم، دیکشنری کپی نمیشود؛ بلکه فقط رفرنس آن، درون متغیر دوم ریخته خواهد شد. در نتیجه با تغییر دیکشنری اول، دیکشنری دوم ما نیز تغییر میکند.
person_backup = person # not a true way to copy dictionary
برای کپی کردن دیکشنری در پایتون میتوان از متد copy()
روی شیء دیکشنری استفاده کرد. (یادگیری بیشتر: اصول برنامه نویسی شی گرا)
person_backup = person.copy()
حالا اگر دیکشنری person
یا person_backup
را تغییر دهیم، محتوای دیکشنری دیگر هیچ تغییری نخواهد کرد.
برای دیدن تمام متدهای دیکشنری پایتون میتوانید به جدول انتهای این صفحه انگلیسی مراجعه کنید.
جمعبندی: دیکشنری در پایتون چیست ؟
دیکشنری در پایتون نوعی لیست انجمنی یا کلید-مقدار است. اگر با لیستها در پایتون آشنایی داشته باشید، میدانید که در لیست برای دسترسی به هر عنصر از اندیس استفاده میکنیم. در دیکشنری اندیس (یا همان کلید) هر مقدار (value) را خودمان تعریف خواهیم کرد.
در این مقاله با نحوه ساخت دیکشنری در پایتون، قواعد مختلف و روشهای کار با آن را آموختیم. دیدیم که میتوان به سادگی از دیکشنریها استفاده کرد. دیکشنریها یکی از محبوبترین و پرکاربردترین ساختمانهای داده در پایتون است که میتوان از آن در قسمتهای مختلف برنامه خود استفاده کرد.
به نظر شما چه ترفندهایی در کار با دیکشنری پایتون کاربردی است که به آن اشارهای نشده؟ این ترفند را از بخش دیدگاهها با دوستانتان به اشتراک بگذارید. اگر سؤالی دارید، باز هم بخش دیدگاهها برای شماست!
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش پایتون
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
سلام لطفا به این سوال جواب بدید
. برنامه ای بنویسید که یک دیکشنری با تعداد آیتم 4 که کلید آن شماره دانشجویی و مقدار آن نام خانوادگی دانشجویان است، را از ورودی دریافت کند. سپس شماره دانشجویی و نام خانوادگی یک شخص را در قالب یک تاپل از ورودی دریافت کند و بررسی کند آیا این شخص در اطلاعات ورودی وجود دارد یا خیر
سلام
جلسات حلقه، گرفتن ورودی و شرطها رو از دوره پایتون ببینید بهتون کمک میکنه.
سلام وقت بخیر چطور میتونم اعدادی که به وسیله input دریافت کردم رو درون یک دیکشنری قرار بدم؟
سلام
میتونید از یه حلقه استفاده کنید. درونش با تابع input مقدار رو گرفته و سپس درون دیکشنری قرار بدید.
سلام
چطور میشه از کاربر چندین key و value گرفت و بعد همه رو در یک دیکشنری قرار داد؟
سلام
احتمالاً به کمک حلقهها بتونید کد موردنظرتون رو بنویسید.
سلام خسته نباشید میخواستم بپرسم میشه از طریق مقادیر به کلید رسید؟(یعنی مقدارشو بدونیم و بخوایم ببینیم این مقدار مال کدوم کلیده)
سلام
در حالت کلی نمیشه! مگه اینکه قطعه کدی بنویسید که روی مقادیر حرکت کنه و اگه به مقدار مورد نظر رسید، کلید رو برگردونه. البته در نظر داشته باشید که چون valueها میتونند تکراری باشند، ممکنه برای هر value چند تا key داشته باشید.
سلام. چطور کدی بنویسیم که با وارد کردن هر کلید مقدار را به ما بدهد؟
سلام
کاملاً بستگی به نیاز و روند برنامهتون داره! شما هر وقت مقدار کلید رو داشته باشید میتونید مقدار متناظر باهاش رو با
dict_name[key]
در اختیار داشته باشید.میتونم از حلقه for در یک دیکشنری استفاده کنم؟
بله! چرا نتونید؟
در اینصورت هر بار بهتون یکی از کلیدها رو میده. اگر هم مثل زیر استفادهاش کنید هر دو کلید و مقدار رو میتونید همزمان داشته باشید:
سلام. با استفاده از دیکشنری من باید کدی رو بنویسم که جریایم رانندگی بعنوان key و هزینه جریمه بعنوان value باشه و مامور باید بیاد جرایم رانندگی رو اعلام کنه در کد و value های جرایم رانندگی مورد نظر جمع بشه و به فرد خاطی اعلام بشه.با استفاده از حلقه for من تا دریافت تعداد جرایم رانندگی رفتم ولی برای اعلام نوع جرایم مثلا A,B,C و جمع جریمه هاشون که همون Value های ما هستن میشه کمک کنید؟
سلام
دیکشنری یک کلید برای دسترسی به مقادیر داره که در مثال شما همون نام جرایم هست. میتونید اسم جریمه رو از کاربر بگیرید تا بتونید به value اون دسترسی داشته باشید.
مثلا من میگم نوع جریمه A هست. شما میتونید از
offences['A']
برای رسیدن به مبلغ مربوط به این جریمه استفاده کنید.سلام خواستم بدونم اگه بخواهیم عناصر یک دیکشنری را که از ورودی گرفته شده را به یک لیست بدهیم ، طوری که اطلاعات قبلی حذف نشوند ، باید چه کنیم؟
سلام
در جلسه کار با لیستها متد
append()
برای اضافه کردن عناصر جدید به لیست معرفی شد. میتونید در یه حلقه روی مقادیر دیکشنری، اونها رو به لیست اضافه کنید.سلام خسته نباشید
چطور میشه کاری کرد که ایتمی که میخوایم داخل دیکشنری جستجو کنیم از کاربر گرفته بشه یعنی بعد از ران کردن برنامه کاربر key رو وارد کنه و value نمایش داده بشه
سلام
با تابع
input()
میتونید از کاربر ورودی بگیرید. یه جلسه از دوره جامع رایگانمون در مورد همین تابعه. حتماً مثالهاش رو ببینید.سلام من چندین دکشنری داخل یک دیکشنری دارم به چه شکل میتونم کلید اون دیکشنری رو صدا کنم ؟
سلام
میتونید به صورت تودرتو (nested) هم به مقادیر دسترسی داشته باشید. مثلاً با
d['key1']['key2']
میتونید به مقدارِ کلید key2 که در یک دیکشنری هست دسترسی داشته باشید. این دیکشنری خودش به عنوان value در دیکشنری اصلی هست.print(x[‘name’][‘ali salari’]) به این صورت خطا میده
العان اگه من بخوام مقدار یکی رو به دست بیارم باید چی کار کنم
سلام
نحوه تعریف دیکشنریتون اشتباهه! دیکشنری حتماً باید key-value باشه در حالی که دیکشنری اصلی شما key نداره! یا باید لیستی از دیکشنریها ایجاد کنید که برای دسترسی چیزی شبیه
x[0]['name']
رو داریم.یا اینکه key تعریف کنید که دسترسیش شبیه
x['new_key']['name']
میشه.سلام وقتتون بخیر، تشکر از مطلب مفیدتون
اگر بخواهیم آخرین ایندکس یک دیکشنری را برگردونیم باید چیکار کنیم؟ ( در حالی که نمیدونیم key اش چیه )
چون اگر لیست بود میشد نوشت
listName[-1]
ولی خب تو دیکشنری اون منفی یک رو به عنوان key در نظر میگیره و کار خراب میشهسلام
چون دیکشنری پایتون بدون ترتیبه (unordered) عملاً آخرین عنصر معنای خاصی نداره! شما میتونید دیکشنری رو تبدیل به لیست و آخرین عنصرش رو بگیرید (
list(d)[-1]
) یا لیست کلیدها رو بگیرید و به آخریش دسترسی داشته باشید؛ مثل:d.keys()[-1]
اگه ترتیب insert شدن در دیکشنری براتون مهمه، از ساختمانهای داده دیگه یا ترکیبی بهتره استفاده کنید.
خیلی ممنون بابت راهنمایی 🌹
با سلام و وقت بخیر من میخوام یک ربات مترجم برای تلگرام بنویسم تمام کدهام کار میکنه فقط از دیکشنری نمیتونم در تلگرام خروجی بگیرم اما میتونم تکست ارسال کنم و بفرستم.
ممنون میشم راهنمایی کنید.
سلام
منظورتون از خروجی گرفتم چیه؟ میخواید یک value از دیکشنری رو استفاده کنید؟
میخوام وقتی کاربر در تلگرام کلمه ای وارد کرد که این کلمه یکی از کلید های دیکشنری هست value همون که میشه معنی اون کلمه به فارسی برگردونه تمام کدم درست کار میکنه ولی همین تیکش گیر میکنه و برای تلگرام ارسال نمیکنه اما توی همین برنامه input بزارم درست کار میکنه فکر کنم مشکل از جای دیگست 🤷♂️
اگه input میذاری درسته، آره احتمالاً مشکل از جای دیگهای باشه.
بدون این برنامه، سعی کن یه پیام ثابت به کاربر بفرستی؛ بعدش دکمهای بذار که وقتی کلیک کرد این متن ثابت ارسال بشه. در نهایت که اوکی شد، دیکشنری رو اضافه کن.
دقیقا همین کار را هم کردم متن میتونم بفرستم و دریافت کنم اما value دیکشنری نمیتونه بفرسته برای کاربر و مینویسه
Unhashable type: ‘dict_keys’
میشه جایی که مقدار رو از دیکشنری فراخوانی میکنید قرار بدید؟ با یه خط قبل و بعدش اگه مرتبطه.
سلام و خسته نباشید ممنون از زحمات شما اگه بخوام برنامه ای بنویسم که یک دیکشنری را به گونه ای تغییربدهد که براساس مقدار ها مرتب سازی صعودی کند چیکار باید بکنم ؟
واینکه بخوام برنامه ای بنویسم که یکلیست رو از کاربردریافت کند و ومجوز تغییرعناصر آن را لغو کند
ممنوم میشم راهنمایی کنید
سلام
میتونید از ساختاری شبیه زیر استفاده کنید:
در دوره بخش پیشرفته دوره مکمل پایتون (+) به موارد مشابهی میپردازیم که میتونه یادگیریتون رو خیلی تقویت کنه.
سلام من میخوام یک مقداری رو بکشم در پایتون مثلا ۱۰:۱۰۰ یعنی ده تا صد تایی دارم کهمیخوام خروجیش اینطوری بشه
10 100
سلام
منظورتون از کشیدن چیه؟! میخواید گرافیکی باشه؟
من میخوام از value به key برسم،چیکار کنم؟
به طور عادی نمیشه! چون valueها ممکنه تکراری باشن. اما اگه بخواید میتونید لیست تمام keyهایی که دارای value موردنظر هستن رو پیدا کنید. (با حلقه و شرط یا comprehension)
سلام وقت بخیر من میخوام از داخل یه دیکشنری با مقادیر خیلی زیاد یه کلیدی رو جستجو کنم
در واقع میخوام که اگه اون کلید تو اون دیکشنری بود value اونو تغییر بدم یعنی یه مقدار جدید بهش اختصاص بدم و اگه نبود یه کلید جدید با مقدار جدید به اون دیکشنری اضافه بشه
حالا اضافه کردن که مشکلی نیست ولی چطور اون کلید رو جستجو کنم ببینم توش هست یا نه
با چه ابزاری این کارو بکنم؟
سلام
با استفاده از کلمه کلیدی in میتونید این بررسی رو انجام بدید. عبارت
'key' in my_dict
نتیجه رو به صورت boolean بهتون میده.سلام . من یک تازه کارم! در یک پروژه خیلی کوچیک میخواستم اسم و فامیل افراد رو به هم مرتبط کنم. پس از دیکشنری استفاده کردم . اما ایراد این بود که مثلا نمیشد دو نفر با اسم علی داشته باشیم!(کلید های مشابه)
1. با کلید های تکراری در هر دیشکنری باید چکار کنیم؟
2. بنظرتون اگه مجبور بشم از دیکشنری استفاده نکنم چه ساز و کاری را به کار بگیرم تا اسم و فامیل ها با هم مرتبط بشن؟
ممنونم
یا علی ع
سلام
بله کلید مشابه در دیکشنری مجاز نیست. شما باید بر اساس نیاز و امکاناتتون از روشهای جایگزین استفاده کنید یا یک ساختمان داده جدید ایجاد کنید!
یه کاری که انجام میشه اینه که در value به جای رشته از لیستی از مقادیر استفاده میکنند.
اما اینطوری یه چالش دیگه دارید. مثلاً اگه دنبال فامیل مربوط به «محمد حسین» باشیم، ممکنه به چند فامیلی بربخوریم که ندونیم اونی که دنبالشیم کدومه.
اگه صرفاً ذخیره نیازه که همین روش خوبه. اما اگه جستجو هم وارد میشه، باید فکری به حال تشخیصش (به کمک یه ویژگی دیگه) کنید.
سلام. من چجوری میتونم خروجی یک دیکشنری حاوی همه بگیرم؟
سلام
میتونید به جای پرینت یا بعدش، مقادیر رو به یه دیکشنری اضافه کنید! در انتهای اجری برنامه یه dictionary از کل مقادیر دارید.
سلام ببخشید میشه بگین این تمرین چطوری درست میشه با دیکشنری
برنامه بنویسید که پنج بار اسم و نمره دانش آموز را بگیرد و نتیجه را بطور دیکشنری چاپ کند و وقتی با نمره و نام تکراری مواجه میشود بگوید ک این نام قبلا ساخته شده
سلام
از یه حلقه که ۵ بار اجرا میشه استفاده کنید. مقادیر رو با input بگیرید و قبل از اضافه کردن name: score بررسی کنید که آیا name در دیکشنری وجود داره یا نه. اگر وجود داشت پیامِ موردنظرتون رو نمایش بدید.
اگر امکانش هست میشه کد رو بنویسید
خیر متأسفانه. تلاش تیم آموزشی ما اینه که برای حل مسائل راهنمایی انجام بدیم و شما بتونید اون رو پیادهسازی کنید. جلسه حلقه و شرط از دوره رایگان رو ببینید میتونید به خوبی بخشهای مختلفش رو بنویسید.
سلام خسته نباشید ممنون میشم این سوال کمکم کنید
در تابع برنامه ای بنویسید که نام و وزن و قد ۱۰ نفر را از ورودی گرفته و BMI ان را محاسبه کنید و در دیکشنری ذخیره کنید و محتوای دیکشنری در پایان نمایش دهید
سلام
اگه با توابع آشنا نیستید، جلسه تابع از دوره رایگان رو ببینید. میتونید دو تا لیست (یا دیکشنری) ورودی بگیرید که قد و وزن رو داره. بعدش با حلقهها (در دوره آموزشش هست) محاسباتتون رو انجام و در یک دیکشنری ذخیره کنید.
سلام وقت به خیر من می خوام یک برنامه بنویسم که فایلی و معدل دانش آموزان رو از ورودی می گیره و در قالب یک دیکشنری ذخیره می کنه و بعد اسم دانش آموز هایی که معدل بالای 18 دارن رو چاپ کنه .
برای این کار من باید value ها رو با 18 در قالب if مقایسه کنم اما خطا می ده که یک لیست و int رو نمی شه با هم مقایسه کرد . لطفا راهنماییم کنید که چه طور این مشکل رو حل کنم .
با تشکر
سلام
یه تیکه از دیکشنری رو میفرستید اینجا؟ احتمالاً معدل (valueهای دیکشنری) رو به جای عددی دارید به صورت لیست ذخیره میکنید.
ممنون خوب بود
سلام من یک دیکشنری نوشتم به این صورت که اجزاش این طورین.
“Milk” : 2000
“Soda” : 3000
بعد من اگه بخوام مقدار عددی این دیکشنری رو حساب کنم باید چیکار کنم؟ (یعنی اینکه 2000 رو با 3000 جمع کنم)
یا اینکه بخش های مشخصی رو با هم جمع کنم چطور؟
سلام
اولین راهحل قطعاً حلقهها هستند که میتونید داخلش شرط هم برای محاسبه مقادیر قرار بدید.
اگه میخواید مجموع همه مقادیر دیکشنری رو محاسبه کنید
sum(d.values())
هم یک انتخابه.سلام ببخشید سوالو اینجا مطرح میکنم بخشی را پیدا نکردم که مربوط به سوالم باشه.
یک مشکلی که برام پیش امده اینه که در تکست canvas میخوام یک عدد ۹ رقمی را نمایش بدم مثلا
یچیزی مثل کد بالا (میدونم کد بالا اشتباهاتی داره)
حالا وقتی ران میشن فقط دو رقم یعنی ۰.۰ نمایش داده میشه میشه بگید چجوری میتونم رقم ها را کامل نشان بدم
سلام
ممکنه مشکلتون با تبدیل این مقدار به رشته و بعدش استفاده در لیبل حل بشه. برای تبدیل هم میتونید مشابه آموزش فرمت دهی رشته python از ساختاری شبیه
"%.f10"%num
استفاده کنید.سلام من یک canves ساختم حالا میخوام یک لیبل را روش نمایش بدم میدونم میشه با کنوس دستور تکست اضافه کرد ولی میخوام حتماً لیبل جدا باشه و هرکاری هم کردم فک کنم لیبل زیر کنوس قرار گرفته
سلام
سؤالتون مربوط به این آموزش نیست. با این حال اگه منظورتون در tkinter هست میتونید از متد
Label()
استفاده کنید.سلام ممنون ازاموزشهای مفیدتون
در صورت استفاده از zip اگر طول هر دو (یا هر 3) لیستی برابر نباشد چه اتفاقی می افته؟
سلام
در اینصورت به اندازه لیستی که کمترین عضو رو داره عملیات zip کردن رو انجام میده.
با سلام این کد من هست من چه طور می توان خروجی آخر را پشت سر هم سوار کنم چون بدون حلقه فور اول و دوم کار نمی کند اگر می شود راه نمایی کنید ممنون .
سلام
امکانش هست یک نمونه ورودی و خروجی مورد نظرتون رو بفرستید؟
اگر هدفتون از این برنامه تبدیل تایپ اشتباه انگلیسی به فارسی هست با همون تعیین پارامتر end که دوستان پشتیبانی در کامنت قبلی اشاره کردند میتونید عبارت رو در یک خط چاپ کنید.
البته اگر این کد بخشی از یک پروژه بزرگتر هست، پیشنهاد میکنم اول رشته رو بسازید (مثلاً با join در رشتهها) و سپس اون رو چاپ کنید.
ممنونم از راهنمایی عالی شما یک سوال دیگر هم داشتم من می خواهم مقدار به دست آمده توی ترمینال که مقدار مدنظر من هست رو با tkinter نمایش بدهم باید چه آبجکتی رو استفاده کنم که بتونم مقدار دومم رو نمایش بدهم ممنون
بستگی به برنامه و objectهایی که در اون دارید داره! به طور عمومی میتونید از لیبلها (با تابع
Label()
) برای نمایش یه متن در صفحه استفاده کنید. اینطوری حتماً نیازه که پیشنهاد نهایی که دادم رو اجرایی کنید. یعنی یه متغیر که رشته نهایی رو داره ایجاد و ازش استفاده کنید.سلام خسته نباشید ببخشید من یک سوال داشتم چه طور می تونم از یک دیکشنری چند مقدار را بگیرم و بعد پشت سر هم ردیف کنم ؟
سلام
منظورتون از پشت هم ردیف کردن این هست که همه مقادیر رو در یک خط چاپ کنید؟ یک روش میتونه استفاده از پاراکتر end در تابع پرینت پایتون هست.
سلام
ببخشید چطور میتونم از طریق یک مقدار به کلید آن در دیکشنری دست پیدا کنم مثلا بخواهم کلید مربوط به فلان مقدار را چاپ کنم
سلام
تابع خاصی برای این کار نداریم. یه راهحل ساده اینه که با یک حلقه، مقدار رو چک کنید و هر وقت پیداش کردید، کلید رو چاپ کنید.
سلام مهندس. میخاستم بدونم چجوری میشه لیستی که از چنتا دیکشنری ساخته شده رو از روی یکی از مقادیر داخل دیکشنری ها مرتب سازی کرد. مثلا توی همه دیکشنری ها اطلاعات افراد هست و یکی از اطلاعات شن افراد هست. چطوری از روی سن دیکشنریهای داخل اون لیست مرتب میشن
سلام
من فرض کردم لیست persons رو داریم که هر عضوش یک دیکشنری پایتون هست و یکی از کلیدهای دیکشنری age. کد زیر این لیست رو بر ساس سن افراد مرتبط میکنه:
سلام وقتتون بخیر با پایتون اینوچه جوری بنویسم
برنامه ای بنویسید که یک عدد n از کاربر دریافت کند و یک دیکشنری برگرداند که در آن key ها اعداد 1 تا n و
value ها مجذور کلیدها باشد
سلام؛ میتونید از حلقه for پایتون استفاده کنید و برای تک تک اعداد مجذورشون رو محاسبه کنید.
سلام
برای من برای حذف با del میگه TypeError: ‘set’ object does not support item deletion برای پوپ هم میگه چیزی به نام pop پیدا نمیشه چکار کنم
سلام
مطمئنید که دیکشنری ایجاد کردید؟ متن خطا میگه که دارید از یک set یا تاپل در پایتون استفاده میکنید. در مجموعهها امکان حذف نداریم.
دقت کنید که دیکشنری با علامت براکت
{ }
تعریف میشه و مجموعه با پرانتز.سلام من یه دیکشنری نوشتم که اسم و فامیلی و سن رو وارد کردم و باید کسانی سنشون بالاتر از 20 هست رو چاب کنم اما خطای کلیدی میده
سلام؛ ممکنه خطا به همراه قطعه کد و دیکشنری رو هم بفرستید؟ احتمالات مختلفی وجود داره و بهتره ببینم چطور دارید از dictionary استفاده میکنید.
سلام من ی دیکشنری نوشتم ک علاوه بر این ک از انگلیسی ب فارسی ترجمه میشه باید از فارسی ب انگلیسی هم ترجمه بشه اگر امکانش هست کمک کنید
سلام
به طور عادی با دیکشنری پایتون نمیتونید چنین کاری بکنید، چون یک طرفه هست. اما ممکنه به کمک توابع مختلف یا روشهای ابتکاری خودتون این ویژگی رو روش پیاده کنید.
یک کتابخونه به اسم bidict برای تعریف دیکشنری دو طرفه در پایتون هست که میتونید بررسیش کنید. من متأسفانه تجربه کار باهاش رو ندارم!
با سلام خدمت شما این چطوری میشه؟
تابعی بنویسید که یک دیکشنری را به عنوان ورودی دریافت کند و یک tuple برگرداند.tuple اول شامل تمام کلیدها و tuple دوم شامل تمام مقادیر دیکشنری باشد.
سلام
مشابه آموزش گرفتن ورودی با پایتون تک تک مقادیر دیکشنری رو دریافت کنید و اون رو بسازید. بعدش با متدهای
values()
وkeys()
کلیدها و مقادیر رو جدا کنید.سلام
چه تفاوتی بینnanوnoneوجود دارد؟؟؟
سلام؛ بر اساس اون چیزی که میدونم،
مقدار none به معنی هیچی برای همه نوع دادهای استفاده میشه و nan مخفف Not a Number یا ناعدد برای مقادیر عددی (که عدد نیستن!) کاربرد داره.
سلام
یه دیکشنری دارم حالا میخام سه تا عدد برتر همراه نام به من بده.چه راه حلی را می دهید.
سلام؛ ممکنه از ساختار دیکشنری خودتون در پایتون یک نمونه مثال بزنید؟ در مجموع در سادهترین حالت میتونید با حلقه ماکزیمومها رو پیدا کنید.
سلام
یک لیست از مقادیر دیکشنری دارم.حالا می خواهم اون کلید های دیکشنری را حذف کنم.فقط کلید هارو حذف کنم.باید چکار کنم.راهنمایی کنید.
سلام؛ میتونید مقادیر دیکشنری رو به لیست تبدیل کنید. اگر اسم دیکشنری پایتون رو
my_dict
در نظر بگیریم، کد زیر این کار رو انجام میده واستون:موفق باشید.
خیلی عالی بود میشه زود تر بروزرسانی کنید 🙂
سلام و واقعا ممنون از راهنماییتون متشکرم🙏🌺🌹
سلام وقت بخیر
من نمیتونم از تابع
()pop
استفاده کنموقتی که اینجوری مینویسم پایتون رو:
از من نام دانشجو رو میخواد اما بعد ولیو رو به من میده نه اینکه اونو از لیست حذف کنه
سلام
کدتون کاملاً صحیحه! من اجراش کردم و به درستی کار کرد.
شما در انتهای برنامه مقدار
y
رو چاپ کردید. در خط سوم مقدار حذف شده از دیکشنری رو داخل اون قرار دادید پس درسته که این مقدار رو بهتون میده.اگر در انتهای برنامه
print(D)
رو اضافه کنید، خواهید دید که عضو مورد نظرتون از دیکشنری حذف شده.موفق باشید.
ممنون از راهنماییتون…
خوشحالم که راهنماییها براتون مفید بوده!
موفق باشید.
سلام خسته نباشید
سوالم اینه که چرا تو حالت اول که از دیکشنری استفاده کردم خطا نمیده ولی تو حالت دوم ک از لیست تهی استفاده کردم خطا میده؟
سلام
داخل دیکشنری پایتون، وقتی کلیدی رو صدا میزنید که وجود نداره، به صورت خودکار سازنده (constructor) عنصر جدید صدا زده میشه و این کلید در دیکشنری ساخته میشه
اما در لیست، وقتی یک ایندکس رو فراخوانی میکنید، صرفاً فراخوانی انجام میشه! وقتی ایندکس مورد نظر وجود نداشته باشه به شما خطا میده
برای اضافه کردن عنصر جدید به لیست میتونید از یکی از دو روش زیر استفاده کنید.
موفق باشید.
سلام خسته نباشید
ایا امکان اینکه بتونیم با input از کاربر بخوایم که دیکشنری تعریف بکنه هست؟ من هرچه گشتم نتونستم پیدا کنم…. و اینکه ایا میشه که یک کلید چند مقدار به عنوان لیست داشته باشه؟ بطور کلی به یک چالشی که برخوردم و چندین ساعت روش وقت گذاشتم اما هردفعه به راه بسته خوردم اینه: تابعی که کاربر یک دیکشنری وارد بکنه و مثلا `اسم شخص` به عنوان کلید و داده های هر کلید چند نمره متفاوت باشن که توی لیست تک بعدی تعریف بشن(یعنی یک نفر دارای چندنمره باشه) و در نتیجه مجموع نمرات کلید هارو با مقدار x مقایسه کنه و در آخر لیستی از اون کلید هایی مجموع نمرات کمتر از x بودن با مجوع نمرات اون کلیدها رو چاپ کنه ممنون میشم کمک کنید
سلام
من تا به حال مستقیماً از ورودی یک دیکشنری نگرفتم. اما میتونید به کمک یک حلقه، ورودیهای متعددی از کاربر بگیرید و هر یک رو به عنوان یک عضو داخل دیکشنری ذخیره کنید.
برای گرفتن ورودی در پایتون هم میتونید آموزش گرفتن ورودی در پایتون رو مطالعه کنید.
جواب سوال دومتون هم بله هست! شما مقدار هر کلید در دیکشنری رو میتونید هر چیز دلخواهی قرار بدید. این مقدار شاید یک عدد باشه و شاید یک لیست دلخواه و حتی یک دیکشنری دیگه!
همیشه سعی کنید مسئلتون رو به بخشهای کوچکتر بشکنید. ابتدا مسئلهای حل کنید که اطلاعات افراد رو به همراه لیست نمرات میگیره.
در مرحله دوم، روی تک تک عناصر دیکشنری پردازشهای لازم رو اعمال کنید.
برای حرکت در دیکشنری هم میتونید به صورت زیر عمل کنید.
موفق باشید.
سلام ممنون از پاسختون
اما اینکه گفتید برای دریافت ورودی در دیکشنری از حلقه ها استفاده کنم مشکل اصلی منم اینجا بود که value که میخواستم به شکل لیست وارد کنم ارور میداد امیدوارم بی ادبی نکنم ولی امکانش هست که شبه کد ورود دیکشنری که value در قالب لیست باشه رو اینجا بنویسید؟
مورد بعدی هم برای تمرین انجام اعمال مثل جمع و….. از دیکشنری پیشفرض با مقادیر مختلف استفاده کردم اما برای جمع یا ….. مقدار لیست های value به ارور TypeError: unsupported operand type(s) for +: ‘int’ and ‘list’
میخورم در حالی که حداقل از نظر خودم راه رو درست رفتم اگر امکانش هست توی این مبحث یه مقدار بیشتر راهنمایی کنید
سلام
چرا شبه کد؟! یک کد ساده و ابتدایی برای گرفتن ورودی و وارد کردنش به لیست براتون نوشتم. کد زیر رو اجرا کنید و موقع وارد کردن نمرات، هر نمره رو با یک
space
از هم جدا کنید.برای سوال دومتون هم، خطا مربوط به این هست که دارید سعی میکنید در یه جایی عدد رو با لیست جمع کنید!
اگر فقط کارتون جمع کردن هست، از تابع
sum()
روی لیست هم میتونید کمک بگیرید.کد زیر، در ادامه کد بالاست که تمام نمرات هر فرد رو جمع و چاپ میکنه.
سعی کردم تا جای ممکن کد رو ساده بنویسم تا متوجه نحوه اجرای اون بشید.
موفق باشید
خیلی ممنون از راهنماییتون بالاخره تونستم حل کنم سوالم رو. موفق باشید❤️
خواهش میکنم. خوشحالم که به نتیجه رسیدید.
موفق باشید.
سلام, من یه متنی انگلیسی دارم که باید هر کلمه و فراوانی آن کلمه رو بدست بیارم و همچنین برای کلمه بعد از آن و به صورت یه لیستی از تاپل بنویسم بخش اول رو انجام دادم ولی نمیدونم بخش دوم رو چجوری انجام بدم که خروجی مورد نظر رو داشته باشه.
فرض کنید متن انگلیسی بصورت زیر باشد (کلمات فرضی هستند):
پس از پردازش این متن که درون فایلی است میخواهیم دیکشنری بصورت زیر داشته باشیم:
مثلا کلید دوم این دیکشنری:
در کل متن (که سه بار ظاهر
bbb
) است که مقدار اول آن فراوانی کلمه tuple متناظر آن یک دوتایی (value و مقدارbbb
کلید این عضو، کلمه شده) است. مقدار دوم آن لیستی بصورت زیر استسلام
خب، قسمت فراوانی رو که تونستید محاسبه کنید؛ این عالیه و راه حل رو پیدا کردید!
احتمالا توی قسمت اول اومدید و کل رشته رو تبدیل کردید به یک لیست که هر عضو لیست یکی از کلماتمونه
حالا برا قسمت دوم،
در هر کلمه که هستید، کلمه بعدی رو بگیرید (اندیسِ یکی بیشتر)
حالا توی تاپل مربوطه بررسی کنید، اگه وجود داشت که مقدار تکرارش رو یکی بیشتر کنید؛ اگه وجود نداشت، اضافش کنید.
این روش راحتترین کاره و البته از نظر زمانی بهینه ترین حالت نیست ولی قابل قبوله
پیشنهاد میکنم برای راحتی کار، ابتدا فراوانی رو محاسبه کنید تا دیکشنری شامل همه کلمات بشه، سپس اقدام به محاسبات بخش دوم کنید.
موفق باشید
درسته ولی مشکل اینه که نمیدونم چجوری کدش رو بنویسم ؟ و که خروجیش به اون صورت باشه اگر ممکنه این قسمت از کد بنویسید
من برای سادگی طول رشته رو کاهش دادم؛ شما هم سعی کنید همیشه چنین کاری انجام بدید.
از یک دیکشنری استفاده کردم که عنصر اول و سومش مقداری نداره و عنصر دومی از قبل یک مورد رو شمرده
فقط توجه کنید که چون مقادیر داخل تاپل رو نمیشه تغییر داد، داخل شرط اولی، من تاپل رو حذف و یک جدید ایجاد میکنم.
این مورد رو داخل پاسخ قبلیم دقت نکرده بودم و بهتون گفتم که مقدار رو آپدیت کنید.
کد رو حتما برای خودتون تحلیل کنید.
امیدوارم تونسته باشم به خوبی نحوه عملکردش رو توضیح داده باشم…
موفق باشید
سلام
مي خواستم بدونم چه طور ميشه با استفاده از مقدار به كليد دسترسي داشت. دسترسي به مقدار با استفاده از كليد رو گفتين ولي برعكسش چه جوريه؟
سلام
میشه دیکشنری رو به لیست تبدیل کرد و با چند متد تو در تو این کار رو انجام داد…
اما یه راه حل ساده تر:
به کمک یک حلقه، میتونیم روی مقادیر جستجو کنیم.
برای مثال فرض کنید دیکشنری
persons
شامل اسم به عنوان کلید و سن افراد به عنوان مقدار هست. به کمک حلقه زیر افرادی رو با سن خاص پیدا میکنیم:موفق باشید