'সেটডিফল্ট' ডিক্ট পদ্ধতির জন্য কেসগুলি ব্যবহার করুন


192

যোগে collections.defaultdictপাইথন 2.5 মধ্যে ব্যাপকভাবে প্রয়োজনীয়তার কমে dictএর setdefaultপদ্ধতি। এই প্রশ্নটি আমাদের সম্মিলিত শিক্ষার জন্য:

  1. setdefaultপাইথন ২.6 / ২.7 এ এখনও কীসের জন্য দরকারী?
  2. কোন জনপ্রিয় ব্যবহারের ক্ষেত্রে setdefaultবাদ পড়েছিল collections.defaultdict?

1
সামান্যভাবে সম্পর্কিত খুব স্ট্যাকওভারফ্লো.com
ব্যবহারকারী

উত্তর:


208

আপনি বলতে পারে defaultdictসেটিংস ডিফল্ট জন্য দরকারী অভি পূরণ করার আগে এবং setdefaultডিফল্ট সেট জন্য দরকারী যখন বা অভি পূরণ করার পরে

সম্ভবত সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে: আইটেমগুলি গোছানো (অরসেটেড ডেটাতে, অন্যথায় ব্যবহার করুন itertools.groupby)

# really verbose
new = {}
for (key, value) in data:
    if key in new:
        new[key].append( value )
    else:
        new[key] = [value]


# easy with setdefault
new = {}
for (key, value) in data:
    group = new.setdefault(key, []) # key might exist already
    group.append( value )


# even simpler with defaultdict 
from collections import defaultdict
new = defaultdict(list)
for (key, value) in data:
    new[key].append( value ) # all keys have a default already

কখনও কখনও আপনি নিশ্চিত করতে চান যে ডিক তৈরির পরে নির্দিষ্ট কীগুলি বিদ্যমান রয়েছে। defaultdictএই ক্ষেত্রে কাজ করে না, কারণ এটি কেবল সুস্পষ্ট অ্যাক্সেসের কী তৈরি করে। অনেকগুলি শিরোনাম সহ আপনি HTTP-ish কিছু ব্যবহার করুন মনে করুন - কিছু alচ্ছিক, তবে আপনি তাদের জন্য ডিফল্ট চান:

headers = parse_headers( msg ) # parse the message, get a dict
# now add all the optional headers
for headername, defaultvalue in optional_headers:
    headers.setdefault( headername, defaultvalue )

1
প্রকৃতপক্ষে, এই আইএমএইচও দ্বারা প্রতিস্থাপনের জন্য প্রধান ব্যবহারের কেস defaultdict। প্রথম অনুচ্ছেদে আপনি কী বোঝাতে চেয়েছেন তার উদাহরণ দিতে পারেন?
এলি বেন্ডারস্কি

2
মুহাম্মদ আলকারৌরি: আপনি প্রথমে যা করেন তা হ'ল ডকটি অনুলিপি করে কিছু আইটেমের ওভাররাইট করে rite আমি এটিও অনেক কিছু করি এবং আমি অনুমান করি যে এটি হাদিসটিই সবচেয়ে বেশি পছন্দ করে setdefault। A defaultdictঅন্যদিকে সমস্ত কাজ defaultvaluesসমান না হলে কাজ করবে না (যেমন কিছু কিছু 0এবং কিছু [])।
জোচেন রিটেল

2
@ YHC4k, হ্যাঁ এজন্যই আমি ব্যবহার করেছি headers = dict(optional_headers)। ক্ষেত্রে যখন ডিফল্ট মানগুলি সমস্ত সমান হয় না। এবং শেষের ফলাফলটি হ'ল যদি আপনি প্রথমে এইচটিটিপি শিরোনাম পান তবে যা আপনি পাননি তাদের জন্য ডিফল্ট সেট করুন। আপনার যদি ইতিমধ্যে থাকে তবে এটি বেশ ব্যবহারযোগ্য optional_headers। আমার প্রদত্ত ২ পদক্ষেপের কোডটি চেষ্টা করে দেখুন এবং এটি আপনার সাথে তুলনা করুন এবং আপনি কী বোঝাতে চাইছেন তা আপনি দেখতে পাবেন।
মুহাম্মদ আলকারৌরি

19
বা কেবল করুনnew.setdefault(key, []).append(value)
ফমালিনা

2
আমার কাছে এটি অদ্ভুত বলে মনে হচ্ছে যে সর্বোত্তম উত্তরটি ফোটায় যা defaultdictতার চেয়েও ভাল setdefault(এখন ব্যবহারের ক্ষেত্রে কোথায়?)। এছাড়াও, আইএমওর উদাহরণটি ChainMapআরও ভালভাবে পরিচালনা করতে পারে http
YvesgereY

29

আমি সাধারণত setdefaultকীওয়ার্ড আর্গুমেন্ট ডিক্টস যেমন এই ফাংশন হিসাবে ব্যবহার করি :

def notify(self, level, *pargs, **kwargs):
    kwargs.setdefault("persist", level >= DANGER)
    self.__defcon.set(level, **kwargs)
    try:
        kwargs.setdefault("name", self.client.player_entity().name)
    except pytibia.PlayerEntityNotFound:
        pass
    return _notify(level, *pargs, **kwargs)

কীওয়ার্ড আর্গুমেন্ট গ্রহণ করে এমন ফাংশনগুলির চারপাশে মোড়কে আর্গুমেন্টগুলি টুইট করার পক্ষে দুর্দান্ত।


16

defaultdict নতুন তালিকার মতো যখন ডিফল্ট মান স্থিতিশীল হয় তবে দুর্দান্ত হয় তবে এটি গতিশীল হয় না not

উদাহরণস্বরূপ, অনন্য ইনটগুলিতে স্ট্রিংগুলি ম্যাপ করার জন্য আমার একটি অভিধান প্রয়োজন। defaultdict(int)ডিফল্ট মানের জন্য সর্বদা 0 ব্যবহার করবে। তেমনি, defaultdict(intGen())সর্বদা 1 উত্পাদন করে।

পরিবর্তে, আমি একটি নিয়মিত ডিক ব্যবহার করেছি:

nextID = intGen()
myDict = {}
for lots of complicated stuff:
    #stuff that generates unpredictable, possibly already seen str
    strID = myDict.setdefault(myStr, nextID())

নোটটি dict.get(key, nextID())অপর্যাপ্ত কারণ আমার পরেও এই মানগুলি উল্লেখ করতে সক্ষম হওয়া দরকার।

intGen আমি তৈরি করা একটি ক্ষুদ্র শ্রেণি যা স্বয়ংক্রিয়ভাবে কোনও ইনট বাড়িয়ে তোলে এবং এর মানটি ফেরত দেয়:

class intGen:
    def __init__(self):
        self.i = 0

    def __call__(self):
        self.i += 1
    return self.i

কারও সাথে যদি এটি করার উপায় থাকে তবে defaultdictআমি এটি দেখতে পছন্দ করব।


: একটি উপায় (একটি উপশ্রেণী) defaultdict সঙ্গে এটা করতে জন্য, এই প্রশ্ন দেখতে পাবেন stackoverflow.com/questions/2912231/...
weronika

8
আপনি প্রতিস্থাপন করতে পারে intGenসঙ্গে itertools.count().next
অ্যান্টিমনি

7
nextID()এর মান প্রতিবর্ধিত হতে চলেছে myDict.setdefault()প্রতিটি সময় বলা হয়, এটির মানটি হিসাবে ব্যবহার না করা হলেও strID। এটি কোনওভাবেই অপব্যয়যুক্ত বলে মনে হয় এবং আমি setdefault()সাধারণভাবে পছন্দ করি না এমন একটি বিষয়কে চিত্রিত করে - যথা এটি সর্বদা তার defaultযুক্তিটি বাস্তবে ব্যবহৃত হয় কি না তা মূল্যায়ন করে ।
মার্টিনো

আপনার সাথে এটা করতে পারেন defaultdict: myDict = defaultdict(lambda: nextID())। পরে, strID = myDict[myStr]লুপে।
মুসফিল

3
আপনি যে আচরণটি ডিফল্টডিক্ট্টের সাথে বর্ণনা করেন তা পেতে, শুধু কেন নয় myDict = defaultdict(nextID)?
চল্লিশ_আজ

10

আমি setdefault()যখন একটি ডিফল্ট মান চাই তখন আমি ব্যবহার করি OrderedDict। সেখানে একটি প্রমিত পাইথন সংগ্রহে উভয় আছে নয়, কিন্তু হয় উপায়ে এই ধরনের একটি সংগ্রহ বাস্তবায়ন।


9

যেমন সর্বাধিক উত্তরগুলি নির্দেশ করে setdefaultবা defaultdictযখন কোনও কী উপস্থিত থাকে না তখন আপনাকে একটি ডিফল্ট মান সেট করতে দেয়। যাইহোক, আমি এর ব্যবহারের ক্ষেত্রে একটি ছোট সতর্কতা নির্দেশ করতে চাই setdefault। পাইথন ইন্টারপ্রেটার setdefaultকার্যকর করলে এটি অভিধানে কী উপস্থিত থাকলেও এটি সর্বদা ফাংশনের দ্বিতীয় তর্কটিকে মূল্যায়ন করবে। উদাহরণ স্বরূপ:

In: d = {1:5, 2:6}

In: d
Out: {1: 5, 2: 6}

In: d.setdefault(2, 0)
Out: 6

In: d.setdefault(2, print('test'))
test
Out: 6

আপনি দেখতে পাচ্ছেন, printঅভিধানে ইতিমধ্যে 2 টি বিদ্যমান থাকলেও এটি কার্যকর করা হয়েছিল। আপনি যদি setdefaultএকটি অপ্টিমাইজেশনের মতো উদাহরণের জন্য উদাহরণস্বরূপ ব্যবহার করার পরিকল্পনা করেন তবে এটি বিশেষত গুরুত্বপূর্ণ হয়ে ওঠে memoization। আপনি যদি দ্বিতীয় যুক্তি হিসাবে একটি পুনরাবৃত্ত ফাংশন কল যুক্ত করেন তবে setdefaultপাইথন সর্বদা ফাংশনটিকে পুনরাবৃত্তভাবে কল করে থাকায় আপনি কোনও কার্যকারিতা পাবেন না।

যেহেতু মেমোয়াইজেশনের কথা উল্লেখ করা হয়েছিল, তাই আপনি মেমোয়েজেশন সহ কোনও ফাংশন বর্ধন করার বিষয়টি বিবেচনা করলে ফান্টাকুলস.লরু_ক্যাচ ডেকরেটর ব্যবহার করার একটি আরও ভাল বিকল্প। lru_cache পুনরাবৃত্তির ক্রিয়াকলাপের জন্য আরও বেশি ক্যাশে প্রয়োজনীয়তা পরিচালনা করে।


8

মুহাম্মদ যেমন বলেছিলেন, এমন পরিস্থিতি রয়েছে যেখানে আপনি কেবল কখনও কখনও একটি ডিফল্ট মান সেট করতে চান। এর একটি দুর্দান্ত উদাহরণ একটি ডেটা স্ট্রাকচার যা প্রথমে জনবসতিযুক্ত, তারপরে অনুসন্ধান করা er

একটি trie বিবেচনা করুন। কোনও শব্দ যুক্ত করার সময়, যদি সাবনোডের প্রয়োজন হয় তবে উপস্থিত না থাকে তবে ট্রাইটি বাড়ানোর জন্য এটি তৈরি করতে হবে। কোনও শব্দের উপস্থিতির জন্য জিজ্ঞাসা করার সময়, অনুপস্থিত সাবনোড নির্দেশ করে যে শব্দটি উপস্থিত নেই এবং এটি তৈরি করা উচিত নয়।

একটি ডিফল্টডিক্ট্ট এটি করতে পারে না। পরিবর্তে, গেট এবং সেটডেফল্ট পদ্ধতি সহ একটি নিয়মিত ডিক ব্যবহার করা উচিত।


5

তাত্ত্বিকভাবে বলতে গেলে, setdefaultআপনি যদি কখনও কখনও ডিফল্ট সেট করতে চান এবং কখনও কখনও না চান তবে এখনও কার্যকর হবে । বাস্তব জীবনে, আমি এরকম ব্যবহারের ক্ষেত্রে আসিনি।

তবে, স্ট্যান্ডার্ড লাইব্রেরি থেকে একটি আকর্ষণীয় ব্যবহারের বিষয়টি উঠে এসেছে (পাইথন ২.6, _থ্রেডিংলোক্যাল.পি):

>>> mydata = local()
>>> mydata.__dict__
{'number': 42}
>>> mydata.__dict__.setdefault('widgets', [])
[]
>>> mydata.widgets
[]

আমি বলব যে ব্যবহার __dict__.setdefaultকরা একটি বেশ দরকারী কেস।

সম্পাদনা : এটি যেমন ঘটে থাকে, এটি স্ট্যান্ডার্ড লাইব্রেরির একমাত্র উদাহরণ এবং এটি একটি মন্তব্যে। সুতরাং এটির পক্ষে অস্তিত্বের ন্যায্যতা প্রমাণ করা যথেষ্ট নয় setdefault। তবুও, এখানে একটি ব্যাখ্যা:

অবজেক্টস তাদের বৈশিষ্ট্যাবলী সংরক্ষণ __dict__অ্যাট্রিবিউট। এটি যেমন ঘটে থাকে তেমনি __dict__বৈশিষ্ট্যটি বস্তু তৈরির পরে যে কোনও সময় লেখা যায়। এটি একটি অভিধানও নয় a defaultdict। এটা তোলে যুক্তিসম্মত সাধারণ ক্ষেত্রে বস্তু আছে জন্য নয় __dict__হিসেবে defaultdictকারণ যে বৈশিষ্ট্য যেমন সকল আইনি শনাক্তকারী থাকার প্রতিটি বস্তুর করতে হবে। সুতরাং পাইথন অবজেক্টগুলিকে পরিত্রাণ পেতে কোনও পরিবর্তনই আগে __dict__.setdefaultথেকে মুছে ফেলা ছাড়াও এটি কার্যকর না বলে মনে করা যায় না।


1
আপনি কী ব্যাখ্যা করতে পারেন - কোনটি _ডিক্ট। সেটডেফল্টকে বিশেষভাবে কার্যকর করে?
এলি বেন্ডারস্কি

1
@ এলি: আমি মনে করি যে বিন্দুটি __dict__বাস্তবায়নের মাধ্যমে একটি dict, একটি নয় defaultdict
ক্যাট্রিয়েল

1
ঠিক আছে. setdefaultপাইথনে থাকার বিষয়ে আমার আপত্তি নেই , তবে এটি এখন প্রায় অকেজো বলে দেখতে আগ্রহী।
এলি বেন্ডারস্কি

@ এলি: আমি সম্মত আমি মনে করি না যে এটি উপস্থিত না থাকলে আজ এটির প্রচলনের যথেষ্ট কারণ রয়েছে। ইতিমধ্যে সেখানে থাকা সত্ত্বেও, ইতিমধ্যে এটি ব্যবহার করে সমস্ত কোড দেওয়া হয়েছে, এটি মুছে ফেলার পক্ষে তর্ক করা কঠিন হবে।
মুহাম্মদ আলকারৌরি

1
ডিফেন্সিভ প্রোগ্রামিংয়ের আওতায় ফাইল। setdefaultস্পষ্ট করে দেয় যে আপনি একটি কী এর মাধ্যমে একটি ডিককে অর্পণ করছেন যা বিদ্যমান থাকতে পারে বা নাও থাকতে পারে, এবং যদি এটি না থাকে তবে আপনি এটি একটি ডিফল্ট মান দিয়ে তৈরি করতে চান: উদাহরণস্বরূপ d.setdefault(key,[]).append(value)। প্রোগ্রামটি অন্য কোথাও আপনি করেন alist=d[k]যেখানে কে গণনা করা হয়, এবং আপনি যদি কে ডি ডি না দিয়ে ফেলে দেন তবে আপনি ব্যতিক্রম চান (যা পূর্বনির্ধারিত দাবিতে assert k in dবা এমনকি প্রয়োজন হতে পারেif not ( k in d): raise KeyError
নাইজেল 222

3

defaultdictওভারের একটি অপূর্ণতা dict( dict.setdefault) হ'ল কdefaultdict বস্তুর একটি নতুন আইটেম তৈরি করে Everytime অ বিদ্যমান চাবি দেওয়া হয় (সঙ্গে যেমন ==, print)। এছাড়াও defaultdictক্লাসটি সাধারণত শ্রেণীর তুলনায় কম সাধারণ হয় dict, এটি আইএমইকে সিরিয়াল করা আরও কঠিন।

PS IMO ফাংশন | পদ্ধতিগুলি কোনও বস্তুর রূপান্তর করতে বোঝায় না, কোনও বস্তুকে রূপান্তরিত করা উচিত নয়।


এটি প্রতিবার একটি নতুন অবজেক্ট তৈরি করতে হবে না। defaultdict(lambda l=[]: l)পরিবর্তে আপনি সহজেই করতে পারেন ।
আর্টিয়ার

6
@ আর্টিয়ারের পরামর্শ অনুযায়ী কখনও করবেন না - পরিবর্তনীয় ডিফল্ট আপনাকে কামড় দেবে।
ব্র্যান্ডন হাম্পার্ট

2

এর কার্যকারিতাটি দেখানোর জন্য সেটডিফল্টের কয়েকটি উদাহরণ এখানে রয়েছে:

"""
d = {}
# To add a key->value pair, do the following:
d.setdefault(key, []).append(value)

# To retrieve a list of the values for a key
list_of_values = d[key]

# To remove a key->value pair is still easy, if
# you don't mind leaving empty lists behind when
# the last value for a given key is removed:
d[key].remove(value)

# Despite the empty lists, it's still possible to 
# test for the existance of values easily:
if d.has_key(key) and d[key]:
    pass # d has some values for key

# Note: Each value can exist multiple times!
"""
e = {}
print e
e.setdefault('Cars', []).append('Toyota')
print e
e.setdefault('Motorcycles', []).append('Yamaha')
print e
e.setdefault('Airplanes', []).append('Boeing')
print e
e.setdefault('Cars', []).append('Honda')
print e
e.setdefault('Cars', []).append('BMW')
print e
e.setdefault('Cars', []).append('Toyota')
print e

# NOTE: now e['Cars'] == ['Toyota', 'Honda', 'BMW', 'Toyota']
e['Cars'].remove('Toyota')
print e
# NOTE: it's still true that ('Toyota' in e['Cars'])

2

আমি স্বীকৃত উত্তরটি পুনরায় লিখেছি এবং নতুনদের জন্য এটি প্রস্তুত করি।

#break it down and understand it intuitively.
new = {}
for (key, value) in data:
    if key not in new:
        new[key] = [] # this is core of setdefault equals to new.setdefault(key, [])
        new[key].append(value)
    else:
        new[key].append(value)


# easy with setdefault
new = {}
for (key, value) in data:
    group = new.setdefault(key, []) # it is new[key] = []
    group.append(value)



# even simpler with defaultdict
new = defaultdict(list)
for (key, value) in data:
    new[key].append(value) # all keys have a default value of empty list []

অতিরিক্ত হিসাবে, আমি পদ্ধতিগুলি রেফারেন্স হিসাবে শ্রেণিবদ্ধ করেছি:

dict_methods_11 = {
            'views':['keys', 'values', 'items'],
            'add':['update','setdefault'],
            'remove':['pop', 'popitem','clear'],
            'retrieve':['get',],
            'copy':['copy','fromkeys'],}

1

আমি প্রায়শই সেটডিফল্ট ব্যবহার করি যখন, অভিধানে একটি ডিফল্ট (!!!) সেট করার সময় এটি পান; কিছুটা সাধারণভাবে ওস পরিবেশের অভিধান:

# Set the venv dir if it isn't already overridden:
os.environ.setdefault('VENV_DIR', '/my/default/path')

কম সংক্ষিপ্তভাবে, এটি দেখতে এরকম দেখাচ্ছে:

# Set the venv dir if it isn't already overridden:
if 'VENV_DIR' not in os.environ:
    os.environ['VENV_DIR'] = '/my/default/path')

এটি লক্ষণীয় যে আপনি ফলস্বরূপ চলকটিও ব্যবহার করতে পারেন:

venv_dir = os.environ.setdefault('VENV_DIR', '/my/default/path')

তবে এটি পূর্বনির্ধারিত অস্তিত্বের আগের চেয়ে কম প্রয়োজন।


1

আর একটি ব্যবহারের ক্ষেত্রে যা আমি মনে করি না উপরে বর্ণিত ছিল। কখনও কখনও আপনি তাদের আইডি দ্বারা অবজেক্টগুলির একটি ক্যাশে ডিক রাখেন যেখানে প্রাথমিক উদাহরণ ক্যাশে থাকে এবং অনুপস্থিত অবস্থায় আপনি ক্যাশে সেট করতে চান।

return self.objects_by_id.setdefault(obj.id, obj)

এটি কার্যকর যখন আপনি সর্বদা আলাদাভাবে আইডি প্রতি একক উদাহরণ রাখতে চান যখনই আপনি প্রতিটি বার কীভাবে আপত্তি পান না কেন। উদাহরণস্বরূপ, যখন অবজেক্ট বৈশিষ্ট্যগুলি মেমরিতে আপডেট হয় এবং সঞ্চয়স্থানে সংরক্ষণ স্থগিত হয়।


1

একটি খুব গুরুত্বপূর্ণ ব্যবহারের ক্ষেত্রে আমি কেবল হোঁচট খেয়েছি: dict.setdefault() মাল্টি-থ্রেড কোডের জন্য দুর্দান্ত যখন আপনি কেবল একটি একক ক্যানোনিকাল অবজেক্ট চান (একাধিক বস্তুর বিপরীতে যেটি সমান হয়)।

উদাহরণস্বরূপ, (Int)Flagপাইথন ৩.6.০-এ এনাম-এ একটি বাগ রয়েছে : যদি একাধিক থ্রেড সংমিশ্রিত (Int)Flagসদস্যের জন্য প্রতিযোগিতা করে তবে একের অধিক হতে পারে:

from enum import IntFlag, auto
import threading

class TestFlag(IntFlag):
    one = auto()
    two = auto()
    three = auto()
    four = auto()
    five = auto()
    six = auto()
    seven = auto()
    eight = auto()

    def __eq__(self, other):
        return self is other

    def __hash__(self):
        return hash(self.value)

seen = set()

class cycle_enum(threading.Thread):
    def run(self):
        for i in range(256):
            seen.add(TestFlag(i))

threads = []
for i in range(8):
    threads.append(cycle_enum())

for t in threads:
    t.start()

for t in threads:
    t.join()

len(seen)
# 272  (should be 256)

সমাধানটি হ'ল setdefault()গণিত সংমিশ্রণ সদস্যকে সংরক্ষণের শেষ ধাপ হিসাবে ব্যবহার করা - যদি অন্য ইতিমধ্যে সংরক্ষণ করা হয়ে থাকে তবে এটি নতুনটির পরিবর্তে ব্যবহৃত হয়, অনন্য এনাম সদস্যদের গ্যারান্টি দিয়ে।


0

[সম্পাদনা] খুব ভুল! সেটডাফল্ট সর্বদা দীর্ঘ_সংখ্যা, ট্রিগার করবে পাইথন আগ্রহী।

টটল এর জবাব প্রসারিত। আমার জন্য সর্বোত্তম ব্যবহারের ক্ষেত্রে হ'ল ক্যাশে প্রক্রিয়া। পরিবর্তে:

if x not in memo:
   memo[x]=long_computation(x)
return memo[x]

যা 3 লাইন এবং 2 বা 3 লুপ اپ গ্রহন করে, আমি আনন্দের সাথে লিখব :

return memo.setdefault(x, long_computation(x))

ভালো উদাহরণ. আমি এখনও মনে করি 3 টি লাইন আরও বোধগম্য, তবে সম্ভবত আমার মস্তিষ্ক সেটডেফল্টের প্রশংসা করতে বাড়বে।
বব স্টেইন

5
এগুলি সমতুল্য নয়। প্রথমটিতে long_computation(x)কেবল যদি বলা হয় x not in memo। যেখানে দ্বিতীয়টিতে long_computation(x)সর্বদা ডাকা হয়। কেবলমাত্র অ্যাসাইনমেন্টটি শর্তসাপেক্ষ, সমতুল্য কোডটি দেখতে setdefaultহবে: v = long_computation(x)/ if x not in memo:/ memo[x] = v
ড্যান ডি

0

আমি এখানে দেওয়া উত্তর পছন্দ:

http://stupidpythonideas.blogspot.com/2013/08/defaultdict-vs-setdefault.html

সংক্ষেপে, আপনি কীভাবে খালি কীগুলি ডাউন স্ট্রিম ( যেমন KeyError ডিফল্ট মান বনাম) অনুসন্ধান করতে চান তার ভিত্তিতে সিদ্ধান্ত নেওয়া উচিত (অ-পারফরম্যান্স-সমালোচনামূলক অ্যাপ্লিকেশনগুলিতে) be


0

আপনি যখনই ইতিমধ্যে সেট করা কীটির মানটি ওভাররাইট করতে চান না তখনsetdefault() তার জন্য আলাদা ব্যবহারের ক্ষেত্রে হয়। ওভাররাইট, যখন না। নেস্টেড ডিকশনারিগুলির ক্ষেত্রে এটি প্রায়শই ঘটে থাকে যে আপনি কীটি এখনও সেট না করে থাকলেই আপনি একটি ডিফল্ট সেট করতে চান কারণ আপনি বর্তমান উপ অভিধানটি সরাতে চান না। এটি যখন আপনি ব্যবহার করেন ।defaultdictsetdefault()setdefault()

এর সাথে উদাহরণ defaultdict:

>>> from collection import defaultdict()
>>> foo = defaultdict()
>>> foo['a'] = 4
>>> foo['a'] = 2
>>> print(foo)
defaultdict(None, {'a': 2})

setdefault ওভাররাইট করে না:

>>> bar = dict()
>>> bar.setdefault('a', 4)
>>> bar.setdefault('a', 2)
>>> print(bar)
{'a': 4}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.