القواميس Dictionaries — أساسيات Python
القواميس (Dictionaries)
القائمة تصل لعناصرها بالفهرس (0، 1، 2...). لكن كثيراً ما نريد الوصول بالاسم: هاتف "أحمد"، سعر "قهوة"، عاصمة "العراق". القاموس يخزن أزواجاً من مفتاح: قيمة.
student = {"name": "منى", "age": 21, "city": "البصرة"}
print(student["name"]) # منىالخصائص
- المفاتيح فريدة: إسناد مفتاح موجود يستبدل قيمته.
- المفاتيح عادة نصوص أو أرقام (يجب أن تكون قيماً غير قابلة للتعديل).
- القيم يمكن أن تكون أي شيء، حتى قوائم أو قواميس أخرى.
- منذ Python 3.7 يحافظ القاموس على ترتيب إضافة العناصر.
- البحث بالمفتاح سريع جداً مهما كبر القاموس.
القراءة بأمان
student["phone"] # KeyError: المفتاح غير موجود
student.get("phone") # None بدون خطأ
student.get("phone", "—") # قيمة بديلةالإضافة والتعديل والحذف
student["phone"] = "0770..." # إضافة
student["age"] = 22 # تعديل
del student["city"] # حذف
age = student.pop("age") # حذف وإرجاع القيمةالمرور على القاموس
for key, value in student.items():
print(key, "=", value)keys() للمفاتيح، values() للقيم، items() للأزواج.
نمط العدّ (مهم جداً)
counts = {}
for word in ["قط", "كلب", "قط"]:
counts[word] = counts.get(word, 0) + 1
print(counts) # {'قط': 2, 'كلب': 1}قائمة من القواميس
أسلوب شائع لتمثيل بيانات مثل جدول:
students = [
{"name": "أحمد", "score": 88},
{"name": "منى", "score": 95},
]
for s in students:
print(s["name"], s["score"])تمرين
أنشئ قاموس أسعار لثلاثة منتجات، واطلب من المستخدم اسم منتج واطبع سعره، أو "غير موجود" إن لم يكن في القاموس.
person = {"name": "أحمد", "age": 25, "city": "بغداد", "skills": ["Python", "SQL"]}
# الوصول
print(person["name"]) # أحمد
print(person.get("job")) # None
print(person.get("job", "غير محدد")) # غير محدد
# إضافة وتعديل وحذف
person["job"] = "مبرمج"
person["age"] = 26
del person["city"]
skills = person.pop("skills")
print(person, skills)
# التحقق والمرور
if "name" in person:
print("الاسم موجود")
for key, value in person.items():
print(f"{key} = {value}")
# نمط العدّ باستخدام get
counter = {}
for char in "hello":
counter[char] = counter.get(char, 0) + 1
print(counter) # {'h': 1, 'e': 1, 'l': 2, 'o': 1}
# قاموس متداخل
users = {
"u1": {"name": "أحمد", "age": 25},
"u2": {"name": "منى", "age": 30},
}
print(users["u2"]["name"]) # منى
# دمج قاموسين
defaults = {"theme": "dark", "lang": "ar"}
settings = {"lang": "en"}
merged = {**defaults, **settings}
print(merged) # {'theme': 'dark', 'lang': 'en'}
اختبر فهمك