উত্তর:
অভিধানে তা নির্বিশেষে কোনও কী মুছে ফেলতে, এর দ্বি-যুক্তি ফর্মটি ব্যবহার করুন dict.pop():
my_dict.pop('key', None)
অভিধানে এবং অন্যথায় উপস্থিত my_dict[key]থাকলে এটি ফিরে আসবে । যদি দ্বিতীয় প্যারামিটারটি নির্দিষ্ট না করা হয় (যেমন। ) এবং উপস্থিত না থাকে তবে একটি উত্থাপিত হয়।keyNonemy_dict.pop('key')keyKeyError
যে কীটি বিদ্যমান রয়েছে তার গ্যারান্টিযুক্ত মুছে ফেলতে, আপনি এটিও ব্যবহার করতে পারেন
del my_dict['key']
KeyErrorকী অভিধানে না থাকলে এটি উত্থাপন করবে ।
pop()ওভার ব্যবহারের একটি সুবিধা del: এটি সেই কীটির জন্য মানটি দেয়। এইভাবে আপনি কোডের এক লাইনের একটি ডিক থেকে একটি এন্ট্রি পেতে এবং মুছতে পারেন।
try/ exceptদ্রবণের থেকে অনেক দ্রুত । আপনি এক বা অন্য পড়তে সহজ খুঁজে পেতে পারেন, যা ভাল। উভয়ই মূর্তিযুক্ত পাইথন, তাই আপনি যা পছন্দ করেন তা চয়ন করুন। তবে এই উত্তরটি আরও জটিল বা অদক্ষ দাবি করা সহজভাবে বোঝা যায় না।
self, সুতরাং এটি যদি এটি করে তবে এটি বিস্ময়কর হবে।
বিশেষত উত্তর দেওয়ার জন্য "এটি করার কোনও এক লাইনের উপায় আছে?"
if 'key' in my_dict: del my_dict['key']
... ভাল, আপনি জিজ্ঞাসা করেছেন ;-)
আপনি বিবেচনা করা উচিত, যদিও, যে একটি থেকে একটি বস্তু মুছে ফেলার এই পদ্ধতি dictহল পারমাণবিক না -এটা করে সম্ভব 'key'হতে পারে my_dictসময় ifবিবৃতি কিন্তু আগে মুছে ফেলা হতে পারে delমৃত্যুদন্ড কার্যকর করা হয়, যা মামলা delএকটি ব্যর্থ হয়ে যাবে KeyError। এটি দেওয়া, এটি ব্যবহার করাdict.pop বা এর লাইনের সাথে কিছু ব্যবহার করা সবচেয়ে নিরাপদ হবে
try:
del my_dict['key']
except KeyError:
pass
যা, অবশ্যই, তা হ 'ল না একটি এক মাছ ধরার নৌকা।
popএটি অবশ্যই আরও সংক্ষিপ্ত, যদিও এটি এইভাবে করার একটি মূল সুবিধা রয়েছে: এটি অবিলম্বে পরিষ্কার হয়ে গেছে যে এটি কী করছে।
try/exceptবিবৃতি আরো ব্যয়বহুল। ব্যতিক্রম উত্থাপন ধীর।
tryসামান্য দ্রুত, যদিও তা না থাকলে, tryএটি আসলে একটি ভাল চুক্তি ধীর slow popমোটামুটি সামঞ্জস্যপূর্ণ তবে tryএকটি অ-উপস্থিত কী সহ সকলের চেয়ে ধীর । Gist.github.com/zigg/6280653 দেখুন । শেষ পর্যন্ত, এটি আপনি অভিধানে মূল কীটি প্রায়শই প্রত্যাশা করেন এবং আপনার অণুবিদ্যার দরকার আছে কি না - এবং আপনি অকাল অপ্টিমাইজেশনে
if 'key' in mydict: #then del...। সঠিকভাবে পার্স করার জন্য আমার ডিকের কাছ থেকে একটি কী / ভাল বের করতে হবে, পপ একটি নিখুঁত সমাধান ছিল না।
ঠিক my_dict.pop("key", None)কী করছে তা বুঝতে আমার কিছুটা সময় লেগেছিল । সুতরাং আমি অন্যদের গুগলিংয়ের সময়টি বাঁচাতে একটি উত্তর হিসাবে এটি যুক্ত করব:
pop(key[, default])যদি কী অভিধানে থাকে তবে এটিকে সরিয়ে ফেলুন এবং এর মানটি ফিরিয়ে দিন, অন্যথায় ডিফল্ট করুন । যদি ডিফল্টটি দেওয়া না হয় এবং কী অভিধানে না থাকে তবে একটি
KeyErrorউত্থাপিত হয়।
dict.pop?আইপিথনে
del my_dict[key]my_dict.pop(key)অভিধান উপস্থিত থেকে কীটি সরিয়ে ফেলার চেয়ে কিছুটা দ্রুত
>>> import timeit
>>> setup = "d = {i: i for i in range(100000)}"
>>> timeit.timeit("del d[3]", setup=setup, number=1)
1.79e-06
>>> timeit.timeit("d.pop(3)", setup=setup, number=1)
2.09e-06
>>> timeit.timeit("d2 = {key: val for key, val in d.items() if key != 3}", setup=setup, number=1)
0.00786
কীটি উপস্থিত না থাকলে if key in my_dict: del my_dict[key]তার চেয়ে কিছুটা দ্রুত my_dict.pop(key, None)। উভয় delএকটি try/ exceptবিবৃতি চেয়ে কমপক্ষে তিনগুণ দ্রুত :
>>> timeit.timeit("if 'missing key' in d: del d['missing key']", setup=setup)
0.0229
>>> timeit.timeit("d.pop('missing key', None)", setup=setup)
0.0426
>>> try_except = """
... try:
... del d['missing key']
... except KeyError:
... pass
... """
>>> timeit.timeit(try_except, setup=setup)
0.133
popহয়েছেন del। অভিধান তৈরি করা এটিকে থেকে মুছে ফেলা পুরোপুরি বামন করবে।
delএবং এর মধ্যেই পার্থক্য pop)
আপনার যদি কোডের এক লাইনের অভিধান থেকে অনেকগুলি কী সরিয়ে ফেলতে হয় তবে আমার মনে হয় মানচিত্র () ব্যবহার করা বেশ সংক্ষিপ্ত এবং পাইথোনিক পঠনযোগ্য:
myDict = {'a':1,'b':2,'c':3,'d':4}
map(myDict.pop, ['a','c']) # The list of keys to remove
>>> myDict
{'b': 2, 'd': 4}
এবং অভিধানে নেই এমন কোনও মান পপ করার ক্ষেত্রে যদি আপনার ত্রুটিগুলি ধরার দরকার হয় তবে ম্যাপের ভিতরে ল্যাম্বডা ব্যবহার করুন ():
map(lambda x: myDict.pop(x,None), ['a', 'c', 'e'])
[1, 3, None] # pop returns
>>> myDict
{'b': 2, 'd': 4}
বা এর মধ্যে python3, আপনাকে অবশ্যই এর পরিবর্তে একটি তালিকা বোধগম্যতা ব্যবহার করতে হবে:
[myDict.pop(x, None) for x in ['a', 'c', 'e']]
এটা কাজ করে। এবং 'ই' এর ফলে ত্রুটি ঘটেনি, যদিও মাইডিক্টের একটি 'ই' কী নেই।
mapএবং বন্ধুরা এখন অলস এবং ফিরে আয়রকারী। mapপার্শ্ব প্রতিক্রিয়া জন্য ব্যবহার করা সাধারণত দুর্বল অনুশীলন হিসাবে বিবেচিত হয়; একটি মান for ... inলুপ আরও ভাল হবে। দেখুন মতামত এবং Iterators পরিবর্তে তালিকাসমূহ আরও তথ্যের জন্য।
[myDict.pop(i, None) for i in ['a', 'c']], কারণ তারা map(এবং filter) এর একটি সাধারণ বিকল্প প্রস্তাব করে ।
for ... inলুপ ব্যবহার করুন ।
map()যা প্রায়শই এর পার্শ্ব প্রতিক্রিয়াগুলির জন্য ব্যবহৃত হয়। পাইথনের প্রস্তাবিত বিকল্প হ'ল তালিকার বোধগম্যতা, যা আমার মতে এখনও বেশ পঠনযোগ্য এবং জ্ঞানীয়ভাবে ওয়ান-লাইনার হিসাবে হালকা (প্রশ্ন দেখুন)। কেবলমাত্র তাদের পার্শ্ব-প্রতিক্রিয়াগুলির জন্যই ব্যবহৃত হয়, উভয় কনস্ট্রাক্টসই প্রকৃতপক্ষে অকেজো তালিকার ফলস্বরূপ, যা অদক্ষ হতে পারে। পাইথন 3 হিসাবে, আমি কোনও বিল্ট-ইন ফাংশন সম্পর্কে অবগত নই যা ব্যয়বহুল উত্পাদনের ছাড়াই জেনারেটর এক্সপ্রেশন দিয়ে নিরাপদে এবং মার্জিতভাবে পুনরাবৃত্তি করতে পারে loop(d.pop(k) for k in ['a', 'b'])।
আপনি কীটি সরিয়ে দিয়ে নতুন অভিধান তৈরি করতে অভিধানের বোধগম্যতা ব্যবহার করতে পারেন :
>>> my_dict = {k: v for k, v in my_dict.items() if k != 'key'}
আপনি শর্ত দ্বারা মুছে ফেলতে পারেন। keyনা থাকলে কোনও ত্রুটি নেই।
"ডেল" কীওয়ার্ডটি ব্যবহার করে:
del dict[key]
আমরা নিম্নলিখিত কয়েকটি পদ্ধতির মাধ্যমে পাইথন অভিধান থেকে একটি কী মুছতে পারি।
delকীওয়ার্ড ব্যবহার করে ; যদিও আপনার মত এটি প্রায় একই পদ্ধতির -
myDict = {'one': 100, 'two': 200, 'three': 300 }
print(myDict) # {'one': 100, 'two': 200, 'three': 300}
if myDict.get('one') : del myDict['one']
print(myDict) # {'two': 200, 'three': 300}
অথবা
আমরা নিম্নলিখিতগুলির মতো করতে পারি:
তবে একটি মনে রাখা উচিত, এই প্রক্রিয়াটিতে এটি অভিধান থেকে বাদ দেওয়া নির্দিষ্ট কী তৈরির পরিবর্তে অভিধান থেকে কোনও কী মুছবে না । তদ্ব্যতীত, আমি লক্ষ্য করেছি যে এটি একটি অভিধান ফিরিয়েছে যা এর মতো আদেশ করা হয়নি ।myDict
myDict = {'one': 100, 'two': 200, 'three': 300, 'four': 400, 'five': 500}
{key:value for key, value in myDict.items() if key != 'one'}
যদি আমরা এটিকে শেলের মধ্যে চালাই, তবে {'five': 500, 'four': 400, 'three': 300, 'two': 200}এটি এর মতো কিছু কার্যকর করবে - লক্ষ্য করুন যে এটি আদেশের মতো নয় myDict। আবারও যদি আমরা মুদ্রণের চেষ্টা করি myDict, তবে আমরা এই পদ্ধতির মাধ্যমে অভিধান থেকে বাদ দিয়েছি এমন সমস্ত কী দেখতে পাব। তবে, নিম্নলিখিত বিবৃতিটি একটি ভেরিয়েবলের মধ্যে বরাদ্দ করে আমরা একটি নতুন অভিধান তৈরি করতে পারি:
var = {key:value for key, value in myDict.items() if key != 'one'}
এখন আমরা যদি এটি মুদ্রণের চেষ্টা করি, তবে এটি পিতামাতার আদেশটি অনুসরণ করবে:
print(var) # {'two': 200, 'three': 300, 'four': 400, 'five': 500}
অথবা
pop()পদ্ধতিটি ব্যবহার করে ।
myDict = {'one': 100, 'two': 200, 'three': 300}
print(myDict)
if myDict.get('one') : myDict.pop('one')
print(myDict) # {'two': 200, 'three': 300}
delএবং এর মধ্যে পার্থক্যটি popহল, pop()পদ্ধতিটি ব্যবহার করে , আমরা নীচের মতো, প্রয়োজন হলে মূল কীটির মানটি সংরক্ষণ করতে পারি :
myDict = {'one': 100, 'two': 200, 'three': 300}
if myDict.get('one') : var = myDict.pop('one')
print(myDict) # {'two': 200, 'three': 300}
print(var) # 100
ভবিষ্যতের রেফারেন্সের জন্য এই सारটিটি কাঁটাচামচ করুন , যদি আপনি এটি দরকারী মনে করেন।
if myDict.get('one')কী উপস্থিত আছে কিনা তা পরীক্ষা করতে ব্যবহার করবেন না ! এটি ব্যর্থ হয় যদি মাইডিক্ট ['এক'] এর একটি মিথ্যা মান থাকে। এছাড়াও, ডিক্টসের অন্তর্নিহিত ক্রম নেই, সুতরাং এটি উল্লেখ করা কোনও অর্থবোধ করে না।
আপনি খুব ভার্বোস হতে চাইলে আপনি ব্যতিক্রম হ্যান্ডলিং ব্যবহার করতে পারেন:
try:
del dict[key]
except KeyError: pass
এটি pop()পদ্ধতিটির চেয়ে ধীরে ধীরে, কীটি উপস্থিত না থাকলে।
my_dict.pop('key', None)
কয়েকটি কীগুলির জন্য এটি বিবেচিত হবে না, তবে আপনি যদি বার বার এটি করে থাকেন তবে পরবর্তী পদ্ধতিটি আরও ভাল বাজি।
দ্রুততম পন্থাটি হ'ল:
if 'key' in dict:
del myDict['key']
তবে এই পদ্ধতিটি বিপজ্জনক কারণ যদি 'key'দুটি লাইনের মধ্যে সরিয়ে ফেলা হয় তবে একটি KeyErrorউত্থাপিত হবে।
আর একটি উপায় হ'ল আইটেমগুলি ব্যবহার করে () + ডিক্স বোধগম্যতা
আইটেম () ডিক বোঝার সাথে মিলিয়ে কী-মূল্য জোড়া মুছে ফেলার কাজটি অর্জন করতে আমাদের সহায়তা করতে পারে তবে এটি একটি ইনপ্লেস ডিক কৌশল না হওয়ার একটি অপূর্ণতা রয়েছে। প্রকৃতপক্ষে একটি নতুন ডিক তৈরি করা থাকলে কীটি আমরা অন্তর্ভুক্ত করতে চাই না except
test_dict = {"sai" : 22, "kiran" : 21, "vinod" : 21, "sangam" : 21}
# Printing dictionary before removal
print ("dictionary before performing remove is : " + str(test_dict))
# Using items() + dict comprehension to remove a dict. pair
# removes vinod
new_dict = {key:val for key, val in test_dict.items() if key != 'vinod'}
# Printing dictionary after removal
print ("dictionary after remove is : " + str(new_dict))
আউটপুট:
dictionary before performing remove is : {'sai': 22, 'kiran': 21, 'vinod': 21, 'sangam': 21}
dictionary after remove is : {'sai': 22, 'kiran': 21, 'sangam': 21}
এটি
my_dictজায়গায় পরিবর্তিত হবে (পরিবর্তনীয়)
my_dict.pop('key', None)
একটি নতুন ডিক জেনারেট (অপরিবর্তনীয়)
dic1 = {
"x":1,
"y": 2,
"z": 3
}
def func1(item):
return item[0]!= "x" and item[0] != "y"
print(
dict(
filter(
lambda item: item[0] != "x" and item[0] != "y",
dic1.items()
)
)
)