سبق ڈکشنری سے متعلق کچھ فنکشنز

محمداحمد

لائبریرین
ڈکشنری کا استعمال بطور شمار کنندہ (counter)

ذیل میں ایک فنکشن دیا گیا ہے۔ جو کسی بھی اسٹرنگ میں موجود حروف کی تعداد کے بارے میں بتاتا ہے۔
PHP:
def how_frequent(s):
    d = dict()
    for c in s:
        if c not in d:
            d[c] = 1
        else:
            d[c] += 1
    return d

سب سے پہلے ایک متغیر d کو ایک خالی ڈکشنری تفویض کی گئی ہے۔ اس کے بعد For Loop کے ذریعے اسٹرنگ کے ایک ایک کریکٹر کو چیک کیا گیا ہے۔ اگر آنے والا کیرکٹر ڈکشنری میں پہلے سے بطور کنجی (key) موجود ہے تو اس کی قدر میں 1 جمع کردیا اور اگر ڈکشنری میں پہلے سے یہ کنجی (key) موجود نہیں ہے تو اسے ڈکشنری میں شامل کرکے اسے 1 کی قدر (value) تفویض کر دی۔ اس طرح جب یہ لوپ سارے اسٹرنگ سے گزر (Traversing Through the String) جائے گا تو ہماری حرفی شماریات مکمل ہو جائیں گی۔

نتیجہ:
PHP:
>>> text1 = 'Python'
>>> how_frequent(text1)
{'h': 1, 'o': 1, 'n': 1, 'P': 1, 't': 1, 'y': 1}
>>> text2 = '''We come to love not by finding a perfect person, but by learning to see an imperfect person perfectly.'''
>>> how_frequent(text2)
{' ': 18, ',': 1, '.': 1, 'W': 1, 'a': 3, 'c': 4, 'b': 3, 'e': 14, 'd': 1, 'g': 2, 'f': 4, 'i': 4, 'm': 2, 'l': 3, 'o': 7, 'n': 8, 'p': 5, 's': 3, 'r': 6, 'u': 1, 't': 7, 'v': 1, 'y': 3}

نتیجے میں ہم دیکھ سکتے ہیں کہ ہمارے فنکشن نے ہر حرف کے آگے وہ تعداد لکھ دی ہے جتنی بار یہ حرف عبارت میں موجود ہے۔

اسے شماریات (Statistics) کی زبان میں histogram کہا جاتا ہے۔
 

محمداحمد

لائبریرین
Reverse Lookup

اگر ہمیں کسی ڈکشنری کی کوئی خاص قدر (value) معلوم ہو اور ہم یہ معلوم کرنا چاہتے ہوں کہ یہ کس کنجی (key) کے ساتھ منسلک ہے تو ہم درض ذیل فنکشن استعمال کریں گے۔ فنکشن میں دی گئی قدر اگر ڈکشنری میں ایک بار موجود ہوئی تو یہ اُس سے منسلکہ کنجی فراہم کرے گا لیکن اگر یہ قدر ڈکشنری میں ایک سے زیادہ بار پائی گئی تو فنکشن تلاش میں ملنے والے پہلے آئٹم (key-value pair) تک محدود رہے گا۔

PHP:
def reverse_lookup(d,v):
    for k in d:
        if d[k] == v:
            return k
    return False

اس فنکشن کے دو پیرامیٹرز ہیں ایک d یعنی ڈکشنری اور دوسرا v یعنی value۔

For Loop کے ذریعے ڈکشنری کے سارے اراکین کو ایک ایک کرکے جانچا گیا ہے اور یہ چیک گیا گیا ہے کہ ڈکشنری کی کسی کنجی (key) سے منسلکہ قدر (value) پیرامیٹر میں دی گئی قدر (value) سے مماثل تو نہیں ہے۔ اگر جواب ہاں (True) میں آئے تو اس کنجی کو بطورِ جواب فراہم کر دیا جائے۔

نتائج یہاں دیکھے جا سکتے ہیں۔

PHP:
>>> d = {'a':'b','c':'d','e':'b','g':'h'}
>>> reverse_lookup (d,'d')
'c'
>>> reverse_lookup (d,'b')
'a'
>>> reverse_lookup (d,'f')
False
>>>
 

محمداحمد

لائبریرین
Inverting a Dictionary

کسی ڈکشنری کی کی کنجیوں اور قدروں کو آپس میں بدل کر نئی ڈکشنری بنانے کے لئے ہم درج ذیل فنکشن استعمال کرتے ہیں۔
PHP:
def invert(d):
    newDict = {}
    for k in d:
        v = d[k]
        newDict[v] = k
    return newDict

کوڈ خود تصریحی (Self-Explanatory) ہی ہے۔ یعنی ہم نے پہلی ڈکشنری کی قدریں (values)لے کر اسے دوسری ڈکشنری کی کنجیاں (keys) بنا دیا اور کنجیوں (keys) کو قدریں (values) بنا دیا۔

مثال:
PHP:
>>> fruit_to_color = {'watermelon': 'green', 'pomegranate': 'red','peach': 'orange', 'cherry': 'red', 'pear': 'green','banana': 'yellow', 'plum': 'purple', 'orange': 'orange'}
>>>
>>> invert(fruit_to_color)
{'orange': 'orange', 'purple': 'plum', 'green': 'pear', 'yellow': 'banana', 'red': 'pomegranate'}
>>>
>>>
>>> d = {'h': 1, 'o': 1, 'n': 1, 'P': 1, 't': 1, 'y': 1}
>>> invert(d)
{1: 'y'}
>>>

ایک بات جو شاید آپ محسوس کریں وہ یہ ہے کہ فنکشن رن ہونے کے بعد ملنے والے نتائج (نئی ڈکشنری ) میں کچھ اراکین کم نظر آ رہے ہیں۔ اس کی وجہ یہ ہے کہ ڈکشنری میں ہمیشہ کنجی (key) منفرد استعمال ہوتی ہے۔ جبکہ ہماری فروٹ والی ڈکشنری میں کافی قدریں ایک جیسی ہیں۔ مثلاً orange بھی orange ہے اور peach بھی orange ہے۔ جب یہی قدریں نئی ڈکشنری میں کنجیاں بنتی ہیں تو پہلی بار تو ان کو قدر تفویض کردی جاتی ہے لیکن بعد میں آنے والی قدریں ترمیم ہوتی رہتی ہیں اور آخر میں سب سے آخری انٹری رہ جاتی ہے۔

اس کا حل یہ ہے کہ اگر ایک کنجی سے منسلک قدریں ایک سے زیادہ ہیں تو append کا استعمال کیا جائے اور ہر نئی قدر کو اسی کنجی سے منسلک کرواتے جائیں۔

درج ذیل فنکشن دیکھیے۔
PHP:
def invert_exact(d):
    newDict = {}
    for k in d:
        v = d[k]
        if not (v in newDict):
            newDict[v] = [k]
        else:
            newDict[v].append(k)
    return newDict

مثال:
PHP:
>>> fruit_to_color = {'watermelon': 'green', 'pomegranate': 'red','peach': 'orange', 'cherry': 'red', 'pear': 'green','banana': 'yellow', 'plum': 'purple', 'orange': 'orange'}
>>> d = {'h': 1, 'o': 1, 'n': 1, 'P': 1, 't': 1, 'y': 1}
>>> invert_exact(fruit_to_color)
{'orange': ['peach', 'orange'], 'purple': ['plum'], 'green': ['watermelon', 'pear'], 'yellow': ['banana'], 'red': ['cherry', 'pomegranate']}
>>> invert_exact(d)
{1: ['h', 'o', 'n', 'P', 't', 'y']}
>>>
 
Top