[Python] एक शब्दकोश से एक आइटम हटाएं


Answers

pop शब्दकोश को बदलता है।

 >>>lol = {"hello":"gdbye"}
 >>>lol.pop("hello")
    'gdbye'
 >>> lol
     {}

यदि आप मूल रखना चाहते हैं तो आप इसे कॉपी कर सकते हैं।

Question

क्या Python में किसी शब्दकोश से आइटम को हटाने का कोई तरीका है?

मुझे पता है कि मैं सिर्फ शब्दकोश पर .pop को कॉल कर सकता हूं, लेकिन वह उस आइटम को वापस कर देता है जिसे हटा दिया गया था। जो मैं खोज रहा हूं वह कुछ है जो शब्दकोष को प्रश्न में तत्व से घटा देता है।

वर्तमान में मेरे पास एक सहायक कार्य है जो शब्दकोष को पैरामीटर के रूप में स्वीकार करता है, और फिर आइटम को हटाए गए शब्दकोश के साथ एक शब्दकोश देता है, क्या कोई और सुरुचिपूर्ण समाधान है?




डेल स्टेटमेंट वह है जिसे आप ढूंढ रहे हैं। यदि आपके पास 'बार' नामक कुंजी के साथ foo नामक एक शब्दकोश है, तो आप इस तरह foo से 'bar' को हटा सकते हैं:

del foo['bar']

ध्यान दें कि यह स्थायी रूप से संचालित होने वाले शब्दकोश को संशोधित करता है। यदि आप मूल शब्दकोश रखना चाहते हैं, तो आपको पहले से एक प्रतिलिपि बनाना होगा:

>>> foo = {'bar': 'baz'}
>>> fu = dict(foo)
>>> del foo['bar']
>>> print foo
{}
>>> print fu
{'bar': 'baz'}

dict कॉल एक उथली प्रतिलिपि बनाता है। यदि आप एक गहरी प्रतिलिपि चाहते हैं, तो copy.deepcopy उपयोग copy.deepcopy

आपकी सुविधा के लिए यहां एक विधि है जिसे आप कॉपी और पेस्ट कर सकते हैं:

def minus_key(key, dictionary):
    shallow_copy = dict(dictionary)
    del shallow_copy[key]
    return shallow_copy



नहीं, इससे कोई दूसरा रास्ता नहीं है

def dictMinus(dct, val):
   copy = dct.copy()
   del copy[val]
   return copy

हालांकि, अक्सर थोड़ा बदलते शब्दकोशों की प्रतियां बनाना संभवतः एक अच्छा विचार नहीं है क्योंकि इसके परिणामस्वरूप तुलनात्मक रूप से बड़ी स्मृति मांगें होती हैं। पुराने शब्दकोष (यदि आवश्यक हो) को लॉग करना आम तौर पर बेहतर होता है और फिर इसे संशोधित करता है।




यह जांचने के लिए अच्छा एक-लाइनर है कि कुंजी मौजूद है या नहीं, इसे हटाएं, मान वापस करें, या डिफ़ॉल्ट:

ret_val = ('key' in body and body.pop('key')) or 5



बस डेल डी ['कुंजी'] पर कॉल करें।

हालांकि, उत्पादन में, यह जांचना हमेशा एक अच्छा अभ्यास है कि डी में 'कुंजी' मौजूद है या नहीं।

if 'key' in d:
    del d['key']



कोड स्निपेट के नीचे आपको निश्चित रूप से मदद मिलेगी, मैंने प्रत्येक पंक्ति में टिप्पणियां जोड़ दी हैं जो कोड को समझने में आपकी सहायता करेंगी।

def execute():
   dic = {'a':1,'b':2}
   dic2 = remove_key_from_dict(dic, 'b')  
   print(dict2)           # {'a': 1}
   print(dict)            # {'a':1,'b':2}

def remove_key_from_dict(dictionary_to_use, key_to_delete):
   copy_of_dict = dict(dictionary_to_use)     # creating clone/copy of the dictionary
   if key_to_delete in copy_of_dict :         # checking given key is present in the dictionary
       del copy_of_dict [key_to_delete]       # deleting the key from the dictionary 
   return copy_of_dict                        # returning the final dictionary

या आप dict.pop () का भी उपयोग कर सकते हैं

d = {"a": 1, "b": 2}

res = d.pop("c")  # No `KeyError` here
print (res)       # this line will not execute

या बेहतर दृष्टिकोण है

res = d.pop("c", "key not found")
print (res)   # key not found
print (d)     # {"a": 1, "b": 2}

res = d.pop("b", "key not found")
print (res)   # 2
print (d)     # {"a": 1}



Links