یاد بگیرید. بسازید.

۶. دیکشنری؛ هر هزینه یک نام و مبلغ دارد

با لیستی از دیکشنری‌ها، نام و مبلغ هر خرید را کنار هم نگه دار و جمع یک دسته را حساب کن.

نکس‌کد؛ پایتون از اولین خط تا پروژه مدیریت هزینه

یک عدد به‌تنهایی کافی نیست

عدد ۴۵۰۰۰ نمی‌گوید چه خریده‌ای. دیکشنری مقدارهای مرتبط را با کلید نگه می‌دارد: {"title": "دفتر", "amount": 45000}. title و amount کلید هستند. با expense["amount"] مبلغ را می‌خوانی. یک لیست از این دیکشنری‌ها، چند خرید را نگه می‌دارد.

نکس‌کد | لیست خریدها شامل رکوردهایی با عنوان، مبلغ و دسته است.
نکس‌کد | لیست خریدها شامل رکوردهایی با عنوان، مبلغ و دسته است.

فقط خریدهای خوراکی را جمع بزن

ناهار و چای چقدر شد؟

یک خرید با دسته food اضافه کن و جمع را پیش‌بینی کن.

main.pypython
expenses = [
    {"title": "ناهار", "amount": 80000, "category": "food"},
    {"title": "دفتر", "amount": 45000, "category": "study"},
    {"title": "چای", "amount": 20000, "category": "food"},
]

food_total = 0
for expense in expenses:
    if expense["category"] == "food":
        food_total += expense["amount"]

print(f"خوراکی: {food_total} تومان")
یک راهنمایی می‌خواهم

داخل حلقه، expense یک دیکشنری است.

راهنمایی بیشتر

خط جمع‌زدن هم داخل if است و هم داخل for؛ هشت فاصله دارد.

حلقه هر سه خرید را می‌بیند ولی شرط فقط برای ناهار و چای درست است. نتیجه ۱۰۰۰۰۰ تومان است. ترتیب کلیدها در نوشتن این محاسبه مهم نیست؛ نام دقیقشان مهم است. expense["price"] خطای KeyError می‌دهد چون چنین کلیدی نداریم.

کدام ظرف داده را انتخاب کنیم؟

لیست برای چند مورد مرتب است؛ دیکشنری برای ویژگی‌های یک مورد. tuple مثل (10, 20) یک دنباله تغییرناپذیر است. set مثل {"food", "study"} برای مقدارهای یکتا مفید است؛ ترتیب نمایش آن را مبنای کار نگذار. برای پروژه ما همان لیست و دیکشنری کافی‌اند.

تمرین: دسته study را حساب کن. شرط را به expense["category"] == "study" تغییر بده؛ جواب ۴۵۰۰۰ است. حالا محاسبه را در تابع total_for_category(expenses, category) بگذار تا نام دسته ورودی تابع باشد. بدنه همان حلقه است و در پایان total را return می‌کند.

ادامه مسیر