freeCodeCamp/guide/arabic/python/defaultdict/index.md

129 lines
4.9 KiB
Markdown

---
title: Python defaultdict
localeTitle: Python defaultdict
---
## Python defaultdict
القاموس هو واحد من أكثر هياكل البيانات المستخدمة في بايثون. القاموس هو مجموعة غير مرتبة من العناصر وعادة ما يكون لدينا مفاتيح وقيم مخزنة في القاموس. دعونا نلقي نظرة على بعض الأمثلة لكيفية استخدام القاموس عادة.
`# dictionary declaration 1
dict1 = dict()
# dictionary declaration 2
dict2 = {}
# Add items to the dictionary
# The syntax to add and retrieve items is same for either of the two objects we defined above.
key = "X"
value = "Y"
dict1[key] = value
# The dictionary doesn't have any specific data-type.
# So, the values can be pretty diverse.
dict1[key] = dict2
`
دعونا ننظر الآن في بعض طرق الاسترجاع.
``# Since "X" exists in our dictionary, this will retrieve the value
value = dict1[key]
# This key doesn't exist in the dictionary.
# So, we will get a `KeyError`
value = dict1["random"]
``
### تجنب KeyError: استخدم وظيفة .get
في حالة عدم وجود المفتاح المحدد في القاموس ، فإن Python `KeyError` . هناك حل بسيط لهذا. دعونا ننظر في كيف يمكننا تجنب `KeyError` باستخدام مدمج وظيفة `.get` .
`dict_ = {}
# Some random key
random_key = "random"
# The most basic way of doing this is to check if the key
# exists in the dictionary or not and only retrieve if the
# key exists. Otherwise not.
if random_key in dict_:
print(dict_[random_key])
else:
print("Key = {} doesn't exist in the dictionary".format(dict_))
`
في كثير من الأحيان ، نوافق على الحصول على قيمة افتراضية عندما لا يكون المفتاح موجودًا. على سبيل المثال عندما بناء عداد. هناك طريقة أفضل للحصول على القيم الافتراضية من القاموس في حالة مفاتيح مفقودة بدلاً من الاعتماد على معيار `if-else` .
`# Let's say we want to build a frequency counter for items in the following array
arr = [1,2,3,1,2,3,4,1,2,1,4,1,2,3,1]
freq = {}
for item in arr:
# Fetch a value of 0 in case the key doesn't exist. Otherwise, fetch the stored value
freq[item] = freq.get(item, 0) + 1
`
لذا ، تعد عملية `get(<key>, <defaultval>)` عملية سهلة لاسترجاع القيمة الافتراضية لأي مفتاح محدد من القاموس. تأتي مشكلة هذه الطريقة عندما نريد التعامل مع هياكل البيانات القابلة للتغيير مثل القيم على سبيل المثال `list` أو `set` .
`dict_ = {}
# Some random key
random_key = "random"
dict_[random_key] = dict_.get(random_key, []).append("Hello World!")
print(dict_) # {'random': None}
dict_ = {}
dict_[random_key] = dict_.get(random_key, set()).add("Hello World!")
print(dict_) # {'random': None}
`
هل رأيت المشكلة؟
لا يتم `set` الجديدة أو `list` الجديدة لمفتاح القاموس. يجب علينا تعيين `list` جديدة أو `set` إلى المفتاح في حالة القيمة المفقودة ثم `append` أو `add` على التوالي. نظرة لي على سبيل المثال لهذا.
`dict_ = {}
dict_[random_key] = dict_.get(random_key, set())
dict_[random_key].add("Hello World!")
print(dict_) # {'random': set(['Hello World!'])}. Yay!
`
### تجنب KeyError: استخدم defaultdict
هذا يعمل أكثر من مرة. ومع ذلك ، هناك طريقة أفضل للقيام بذلك. طريقة أكثر `pythonic` . `defaultdict` هو فئة فرعية للفئة dict المضمنة. يقوم `defaultdict` ببساطة بتعيين القيمة الافتراضية التي `defaultdict` في حالة وجود مفتاح مفقود. لذا ، فإن الخطوتين:
`dict_[random_key] = dict_.get(random_key, set())
dict_[random_key].add("Hello World!")
`
يمكن الآن دمجها في خطوة واحدة. على سبيل المثال
`from collections import defaultdict
# Yet another random key
random_key = "random_key"
# list defaultdict
list_dict_ = defaultdict(list)
# set defaultdict
set_dict_ = defaultdict(set)
# integer defaultdict
int_dict_ = defaultdict(int)
list_dict_[random_key].append("Hello World!")
set_dict_[random_key].add("Hello World!")
int_dict_[random_key] += 1
"""
defaultdict(<class 'list'>, {'random_key': ['Hello World!']})
defaultdict(<class 'set'>, {'random_key': {'Hello World!'}})
defaultdict(<class 'int'>, {'random_key': 1})
"""
print(list_dict_, set_dict_, int_dict_)
`
* * *
[المستندات الرسمية](https://docs.python.org/2/library/collections.html)