හොඳ පිළිතුරු ගොඩක් තියෙනවා, නමුත් මට එක දෙයක් අවධාරණය කිරීමට අවශ්යයි.
ශබ්ද කෝෂයකින් අයිතම ඉවත් කිරීමට ඔබට dict.pop()
ක්රමවේදය සහ වඩාත් සාමාන්ය del
ප්රකාශය යන දෙකම භාවිතා කළ හැකිය . ඔවුන් දෙදෙනාම මුල් ශබ්ද කෝෂය විකෘති කරයි, එබැවින් ඔබ පිටපතක් සෑදිය යුතුය (පහත විස්තර බලන්න).
ඔබ ඔවුන්ට KeyError
සපයන යතුර ශබ්ද කෝෂයේ නොමැති නම් ඔවුන් දෙදෙනාම මතු කරයි :
key_to_remove = "c"
d = {"a": 1, "b": 2}
del d[key_to_remove] # Raises `KeyError: 'c'`
සහ
key_to_remove = "c"
d = {"a": 1, "b": 2}
d.pop(key_to_remove) # Raises `KeyError: 'c'`
ඔබ මේ ගැන සැලකිලිමත් විය යුතුයි:
ව්යතිරේකය අල්ලා ගැනීමෙන්:
key_to_remove = "c"
d = {"a": 1, "b": 2}
try:
del d[key_to_remove]
except KeyError as ex:
print("No such key: '%s'" % ex.message)
සහ
key_to_remove = "c"
d = {"a": 1, "b": 2}
try:
d.pop(key_to_remove)
except KeyError as ex:
print("No such key: '%s'" % ex.message)
චෙක්පතක් කිරීමෙන්:
key_to_remove = "c"
d = {"a": 1, "b": 2}
if key_to_remove in d:
del d[key_to_remove]
සහ
key_to_remove = "c"
d = {"a": 1, "b": 2}
if key_to_remove in d:
d.pop(key_to_remove)
නමුත් pop()
ඊටත් වඩා සංක්ෂිප්ත ක්රමයක් ඇත - පෙරනිමි ප්රතිලාභ අගය සපයන්න:
key_to_remove = "c"
d = {"a": 1, "b": 2}
d.pop(key_to_remove, None) # No `KeyError` here
pop()
ඉවත් කරන යතුරක වටිනාකම ලබා ගැනීමට ඔබ භාවිතා නොකරන්නේ නම් ඔබට අවශ්ය කිසිවක් අවශ්ය නොවේ None
. තමන්ගේම සංකූලතා සහිත කාර්යයක් වීම නිසා චෙක්පත del
සමඟ භාවිතා in
කිරීම තරමක් වේගවත් විය හැකිය pop()
. සාමාන්යයෙන් එය එසේ නොවේ, එබැවින් pop()
පෙරනිමි අගය සමඟ ප්රමාණවත් වේ.
ප්රධාන ප්රශ්නය සඳහා, ඔබේ ශබ්ද කෝෂයේ පිටපතක් සෑදිය යුතුය, මුල් ශබ්ද කෝෂය සුරැකීමට සහ යතුර ඉවත් නොකර නව එකක් තිබිය යුතුය.
මෙහි තවත් සමහර අය යෝජනා කරන්නේ සම්පූර්ණ (ගැඹුරු) පිටපතක් සමඟ copy.deepcopy()
, එය අතිරික්තයක්, “සාමාන්ය” (නොගැඹුරු) පිටපතක්, භාවිතා කිරීම copy.copy()
හෝ dict.copy()
ප්රමාණවත් විය හැකිය. යතුරක් සඳහා අගයක් ලෙස ශබ්ද කෝෂය වස්තුව වෙත යොමු කිරීමක් තබා ගනී. එබැවින් ඔබ ශබ්දකෝෂයකින් යතුරක් ඉවත් කළ විට මෙම යොමු කිරීම ඉවත් කරනු ලැබේ, යොමු කරන ලද වස්තුව නොවේ. මතකයේ වෙනත් සඳහනක් නොමැති නම්, කසළ එකතු කරන්නා විසින් එම වස්තුව පසුව ස්වයංක්රීයව ඉවත් කරනු ඇත. ගැඹුරු පිටපතක් සෑදීම සඳහා නොගැඹුරු පිටපතට සාපේක්ෂව වැඩි ගණනය කිරීම් අවශ්ය වේ, එබැවින් එය පිටපත සෑදීම, මතකය නාස්ති කිරීම සහ ග්රාම නිලධාරීට වැඩි වැඩ කොටසක් ලබා දීමෙන් කේත ක්රියාකාරිත්වය අඩු කරයි, සමහර විට නොගැඹුරු පිටපතක් ප්රමාණවත් වේ.
කෙසේ වෙතත්, ඔබට විකෘති වස්තු ශබ්ද කෝෂ අගයන් ලෙස තිබේ නම් සහ යතුර නොමැතිව ආපසු එවූ ශබ්ද කෝෂයේ පසුව ඒවා වෙනස් කිරීමට අදහස් කරන්නේ නම්, ඔබ ගැඹුරු පිටපතක් සෑදිය යුතුය.
නොගැඹුරු පිටපතක් සමඟ:
def get_dict_wo_key(dictionary, key):
"""Returns a **shallow** copy of the dictionary without a key."""
_dict = dictionary.copy()
_dict.pop(key, None)
return _dict
d = {"a": [1, 2, 3], "b": 2, "c": 3}
key_to_remove = "c"
new_d = get_dict_wo_key(d, key_to_remove)
print(d) # {"a": [1, 2, 3], "b": 2, "c": 3}
print(new_d) # {"a": [1, 2, 3], "b": 2}
new_d["a"].append(100)
print(d) # {"a": [1, 2, 3, 100], "b": 2, "c": 3}
print(new_d) # {"a": [1, 2, 3, 100], "b": 2}
new_d["b"] = 2222
print(d) # {"a": [1, 2, 3, 100], "b": 2, "c": 3}
print(new_d) # {"a": [1, 2, 3, 100], "b": 2222}
ගැඹුරු පිටපතක් සමඟ:
from copy import deepcopy
def get_dict_wo_key(dictionary, key):
"""Returns a **deep** copy of the dictionary without a key."""
_dict = deepcopy(dictionary)
_dict.pop(key, None)
return _dict
d = {"a": [1, 2, 3], "b": 2, "c": 3}
key_to_remove = "c"
new_d = get_dict_wo_key(d, key_to_remove)
print(d) # {"a": [1, 2, 3], "b": 2, "c": 3}
print(new_d) # {"a": [1, 2, 3], "b": 2}
new_d["a"].append(100)
print(d) # {"a": [1, 2, 3], "b": 2, "c": 3}
print(new_d) # {"a": [1, 2, 3, 100], "b": 2}
new_d["b"] = 2222
print(d) # {"a": [1, 2, 3], "b": 2, "c": 3}
print(new_d) # {"a": [1, 2, 3, 100], "b": 2222}