d.get विधि (?) मेरे लिए कुंजी को वापस करते समय एक शब्दकोश में अधिकतम मूल्य खोजने के लिए शानदार रूप से काम कर रही है। लेकिन d.get कैसे काम करता है, मुझे समझ नहीं आ रहा है और न ही कोई स्पष्टीकरण मिल रहा है। जहाँ तक मैं बता सकता हूँ: max() एक iterable पर पुनरावृति करता है और सबसे बड़े मूल्य का पुनरावृत्ति देता है। dict पर पुनरावृति करते समय, यह डिफ़ॉल्ट रूप से max key का आकलन करता है।

मेरा भ्रम d.get और d.get(key) के बीच के अंतर को लेकर है। आप () के बिना किसी विधि को कैसे कॉल कर सकते हैं? मुझे यकीन नहीं है कि इसकी जांच कैसे करें।

foo = max(d, key = d.get)

weights = {
 95: 0.0,
 96: 0.0,
 97: 0.30793650793650795,
 98: 0.0,
 99: 0.0,
 100: 0.0,
 101: 0.48095238095238096,
 102: 0.0,
 103: 0.0,
 104: 0.49523809523809526,
 105: 0.0}

heaviest = max(weights, key = weights.get)
--> 104  

max() के लिए वैकल्पिक तर्क का उपयोग करके कोई भी क्रमबद्ध कर सकता है value और key लौटाएं। मुझे समझ में नहीं आ रहा है कि key तर्क को क्या सौंपा जा रहा है।

सबको शुक्रीया।

0
Chris Kenyon 4 जिंदा 2019, 00:50

3 जवाब

सबसे बढ़िया उत्तर

weights.get एक ऐसा फ़ंक्शन है जो weights में संबंधित कुंजी के लिए एक मान देता है। जब max सबसे बड़े मान की तलाश करता है, तो यह key तर्क के वापसी मूल्य का उपयोग करता है, इनपुट में एक तर्क के रूप में गुजरता है।

यह कोड:

heaviest = max(weights, key=weights.get)

के बराबर है:

heaviest = max(weights, key=lambda k: weights.get(k))

या इससे भी अधिक स्पष्ट रूप से:

def fetchVal(key):
    return weights.get(key) # same as weights[key]

heaviest = max(weights, key=fetchVal)

जब आप weights को max में पास करते हैं, तो यह डिक्शनरी की कुंजियों पर पुनरावृति करता है। मूल रूप से, max(weights, key=weights.get) के साथ, आप कह रहे हैं: मुझे weights की अधिकतम कुंजी दें; हालांकि, अधिकतम निर्धारित करने के लिए कुंजी के मान का उपयोग करने के बजाय, weights में संबंधित मान का उपयोग करें।

1
iz_ 4 जिंदा 2019, 00:57

यह अधिकतम फ़ंक्शन "कुंजी =" तर्क के रूप में प्राप्त विधि जितना अधिक नहीं है, जो एक फ़ंक्शन को तर्क के रूप में लेता है। जब आप इसे अधिकतम बताते हैं (my_dict, key=my_dict.get)

यह my_dict की कुंजियों पर पुनरावृति करता है, कुंजी = तर्क में दिए गए फ़ंक्शन के लिए प्रत्येक शब्दकोश कुंजी को पास करता है। और वह कुंजी देता है जिसके लिए फ़ंक्शन आउटपुट उच्चतम था।

max(my_dict, key=lambda k:my_dict[k])

वही करेंगे।

0
ebro42 4 जिंदा 2019, 01:02

d.get(k) केवल कुंजी k के लिए शब्दकोश में मान लौटाता है।

जब आप किसी डिक्शनरी पर पुनरावृति करते हैं, तो इटरेटर डिक्शनरी कुंजियाँ लौटाता है। इसलिए प्रत्येक डिक्शनरी के लिए, max कॉल d.get(key) को एक दूसरे के साथ तुलना करने के लिए मान प्राप्त करने के लिए करते हैं। d[key] के बराबर है, इसलिए यह संबंधित शब्दकोश तत्व देता है।

अंत में, max वह कुंजी लौटाता है जो इन सभी मानों के अधिकतम से मेल खाती है।

आपके द्वारा दिया गया कोड इसके बराबर है:

foo = max(d, key = lambda k: d[k])
2
Barmar 4 जिंदा 2019, 00:55