Bir anahtar─▒n s├Âzl├╝kte zaten mevcut olup olmad─▒─č─▒n─▒ kontrol edin


Al─▒nan cevaba git


Anahtar─▒n de─čerini g├╝ncellemeden ├Ânce bir anahtar s├Âzl├╝kte olup olmad─▒─č─▒n─▒ test etmek istedim. A┼ča─č─▒daki kodu yazd─▒m:

 if 'key1' in dict.keys():
  print "blah"
else:
  print "boo"
 

Bu i┼či ba┼čarman─▒n en iyi yolu olmad─▒─č─▒n─▒ d├╝┼č├╝n├╝yorum. S├Âzl├╝kteki bir anahtar─▒ test etmenin daha iyi bir yolu var m─▒?


2683









Cevap say─▒s─▒n─▒ say: 16






in bir anahtar─▒n varl─▒─č─▒n─▒ s─▒namak i├žin ama├žlanan yol bir dict .

 d = dict()

for i in range(100):
    key = i % 10
    if key in d:
        d[key] += 1
    else:
        d[key] = 1
 

Bir varsay─▒lan istiyorsan─▒z, her zaman kullanabilirsiniz dict.get() :

 d = dict()

for i in range(100):
    key = i % 10
    d[key] = d.get(key, 0) + 1
 

Her zaman kullanabilirsiniz herhangi anahtar─▒ i├žin varsay─▒lan bir de─čer sa─člamak istiyorsa ... ve defaultdict gelen collections mod├╝l, bu nedenle gibi:

 from collections import defaultdict

d = defaultdict(int)

for i in range(100):
    d[i % 10] += 1
 

... ancak genel olarak, in anahtar kelime bunu yapman─▒n en iyi yoludur.


2930







Anahtar aramak zorunda de─čilsiniz:

 if 'key1' in dict:
  print "blah"
else:
  print "boo"
 

Bu, arama tu┼člar─▒n─▒n yapaca─č─▒ do─črusal bir arama yapmak yerine, s├Âzl├╝─č├╝n karma┼čas─▒n─▒ kulland─▒─č─▒ndan ├žok daha h─▒zl─▒ olacakt─▒r.


1457







Bir anahtar kelimenin varl─▒─č─▒n─▒, in anahtar s├Âzc├╝─č├╝n├╝ kullanarak bir s├Âzl├╝kte test edebilirsiniz :

 d = {'a': 1, 'b': 2}
'a' in d # <== evaluates to True
'c' in d # <== evaluates to False
 

Bir anahtar─▒n bir s├Âzl├╝kte mutasyona u─čramadan ├Ânce varl─▒─č─▒n─▒ kontrol etmek i├žin yayg─▒n olarak kullan─▒lan bir de─čer, varsay─▒lan de─čeri s─▒f─▒rlamakt─▒r (├Ârne─čin, e─čer de─čerleriniz listeler ise ve ekleyebilece─činiz bo┼č bir liste oldu─čundan emin olmak istiyorsan─▒z bir tu┼č i├žin ilk de─čeri girerken). Bu gibi durumlarda collections.defaultdict() , ilginizi ├žeken t├╝r├╝ bulabilirsiniz .

Eski kodda, has_key() s├Âzl├╝klerdeki anahtarlar─▒n varl─▒─č─▒n─▒ kontrol etmek i├žin kullan─▒mdan kald─▒r─▒lm─▒┼č bir y├Ântem de bulabilirsiniz ( key_name in dict_name bunun yerine sadece kullan─▒n ).


260







Bunu k─▒saltabilirsiniz:

 if 'key1' in dict:
    ...
 

Ancak, bu en iyi ihtimalle kozmetik bir geli┼čmedir. Neden bunun en iyi yol olmad─▒─č─▒n─▒ d├╝┼č├╝n├╝yorsun?


95







Kabul edilen cevap verenin ├Ânerdi─či y├Ântemlerin (10m d├Âng├╝) h─▒z─▒n─▒n y├╝r├╝t├╝lmesine ili┼čkin ek bilgi i├žin:

  • 'key' in mydict ge├žen s├╝re 1.07 sn
  • mydict.get('key') ge├žen s├╝re 1.84 sn
  • mydefaultdict['key'] ge├žen s├╝re 1.07 sn

Bu nedenle kullan─▒lmas─▒ in veya defaultdict kullan─▒lmas─▒ tavsiye edilir get .


50







Bunun setdefault yerine y├Ântemi kullanman─▒z─▒ tavsiye ederim . ─░stedi─činiz her ┼čeyi yapacak gibi geliyor.

 >>> d = {'foo':'bar'}
>>> q = d.setdefault('foo','baz') #Do not override the existing key
>>> print q #The value takes what was originally in the dictionary
bar
>>> print d
{'foo': 'bar'}
>>> r = d.setdefault('baz',18) #baz was never in the dictionary
>>> print r #Now r has the value supplied above
18
>>> print d #The dictionary's been updated
{'foo': 'bar', 'baz': 18}
 

48







Python s├Âzl├╝─č├╝nde bir get ('key', default) y├Ântemi vard─▒r. B├Âylece, hi├žbir anahtar olmamas─▒ durumunda sadece varsay─▒lan bir de─čer belirleyebilirsiniz.

 values = {...}
myValue = values.get('Key', None)
 

43







EAFP'yi kullanmaya ne dersiniz (izin almaktan affetmek daha kolay):

 try:
   blah = dict["mykey"]
   # key exists in dict
except KeyError:
   # key doesn't exist in dict
 

Di─čer SO yay─▒nlar─▒na bak─▒n:

Python e─čer vs deneyin kullan─▒lmas─▒ veya

Python'da ├╝ye varl─▒─č─▒n─▒n kontrol edilmesi


29







├ť├žl├╝ operat├Âr kullanarak:

 message = "blah" if 'key1' in dict else "booh"
print(message)
 

24







Sonu├žlar─▒ alabilece─činiz yollar:

Hangisi daha iyi 3 ┼čeye ba─čl─▒d─▒r:

  1. 'Normalde bir anahtara sahip' veya 'normalde anahtara sahip de─čil' s├Âzl├╝─č├╝ m├╝?
  2. Else ... elseif ... else gibi ko┼čullar─▒ kullanmay─▒ d├╝┼č├╝n├╝yor musunuz?
  3. S├Âzl├╝k ne kadar b├╝y├╝k?

Devam─▒n─▒ oku: http://paltman.com/try-except-performance-in-python-a-simple-test/

'─░n' veya 'if' yerine try / block komutunun kullan─▒lmas─▒:

 try:
    my_dict_of_items[key_i_want_to_check]
except KeyError:
    # Do the operation you wanted to do for "key not present in dict".
else:
    # Do the operation you wanted to do with "key present in dict."
 

17







Yaln─▒zca Python 2: (ve python 2.7 in zaten desteklemektedir )

has_key () y├Ântemini kullanabilirsiniz:

 if dict.has_key('xyz')==1:
    #update the value for the key
else:
    pass
 

16







Sadece Chris'e ekleyen bir FYI. B (en iyi cevap):

 d = defaultdict(int)
 

De ├žal─▒┼č─▒r; sebebi ├ža─č─▒ran olmas─▒d─▒r int() d├Âner 0 budur defaultdict "Fabrika ─░┼člev" belgelerinde dolay─▒s─▒yla (bir s├Âzl├╝k olu┼čtururken) sahne arkas─▒nda yapar ad.


15







Bir anahtar─▒n s├Âzl├╝kte zaten mevcut olup olmad─▒─č─▒n─▒ kontrol edin

Bunun nas─▒l yap─▒laca─č─▒ fikrini edinmek i├žin ├Ânce s├Âzl├╝kte hangi y├Ântemleri ├ža─č─▒rabilece─čimizi inceleriz. ─░┼čte y├Ântemler:

 d={'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}
 

 Python Dictionary clear()       Removes all Items
Python Dictionary copy()        Returns Shallow Copy of a Dictionary
Python Dictionary fromkeys()    Creates dictionary from given sequence
Python Dictionary get()         Returns Value of The Key
Python Dictionary items()       Returns view of dictionary (key, value) pair
Python Dictionary keys()        Returns View Object of All Keys
Python Dictionary pop()         Removes and returns element having given key
Python Dictionary popitem()     Returns & Removes Element From Dictionary
Python Dictionary setdefault()  Inserts Key With a Value if Key is not Present
Python Dictionary update()      Updates the Dictionary 
Python Dictionary values()      Returns view of all values in dictionary
 

Anahtar─▒n zaten var olup olmad─▒─č─▒n─▒ kontrol etmek i├žin kullan─▒lan vah┼či y├Ântem, get() y├Ântem olabilir :

 d.get("key")
 

Di─čer iki ilgin├ž y├Ântem items() ve keys() ├žok fazla i┼č gibi geliyor. Bu y├╝zden get() bizim i├žin do─čru y├Ântem olup olmad─▒─č─▒n─▒ inceleyelim . Bizim d├╝┼č├╝ncemiz var d :

 d= {'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}
 

Yazd─▒rma, sahip olmad─▒─č─▒m─▒z anahtar─▒n geri d├Ânece─čini g├Âsterir None :

 print(d.get('key')) #None
print(d.get('clear')) #0
print(d.get('copy')) #1
 

Biz olabilir anahtar mevcut veya hi├ž ise bilgi almak i├žin kullanabilirsiniz. Ancak, bekarla birebir yarat─▒rsak bunu d├╝┼č├╝n├╝n key:None :

 d= {'key':None}
print(d.get('key')) #None
print(d.get('key2')) #None
 

get() Baz─▒ de─čerlerin olmas─▒ durumunda, bu y├Ânteme ├Ânc├╝l├╝k etmek g├╝venilir de─čildir None . Bu hikayenin daha mutlu bir sonu olmal─▒. in Kar┼č─▒la┼čt─▒r─▒c─▒ kullan─▒rsak :

 print('key' in d) #True
print('key2' in d) #False
 

Do─čru sonu├žlar─▒ al─▒yoruz. Python bayt kodunu inceleyebiliriz:

 import dis
dis.dis("'key' in d")
#   1           0 LOAD_CONST               0 ('key')
#               2 LOAD_NAME                0 (d)
#               4 COMPARE_OP               6 (in)
#               6 RETURN_VALUE

dis.dis("d.get('key2')")
#   1           0 LOAD_NAME                0 (d)
#               2 LOAD_METHOD              1 (get)
#               4 LOAD_CONST               0 ('key2')
#               6 CALL_METHOD              1
#               8 RETURN_VALUE
 

Bu, in k─▒yaslama operat├Âr├╝n├╝n sadece daha g├╝venilir olmad─▒─č─▒n─▒, hatta daha h─▒zl─▒ oldu─čunu g├Âsterir get() .


6







Python s├Âzl├╝─č├╝ ad─▒ verilen y├Ântemi vard─▒r __contains__ . Bu y├Ântem, e─čer s├Âz konusu anahtar ba┼čka bir False d├Ând├╝r├╝rse True d├Ând├╝r├╝r.

  >>> temp = {}

 >>> help(temp.__contains__)

Help on built-in function __contains__:

__contains__(key, /) method of builtins.dict instance
    True if D has a key k, else False.
 

4







Boole i┼čle├žlerini kullanan bir anahtar olup olmad─▒─č─▒n─▒ denetlemenin bir ba┼čka yolunu payla┼čma.

 d = {'a': 1, 'b':2}
keys = 'abcd'

for k in keys:
    x = (k in d and 'blah') or 'boo'
    print(x) 
 

Bu d├Âner

 >>> blah
>>> blah
>>> boo
>>> boo
 

a├ž─▒klama

├ľnce Python, bilmelidir ki 0 , None ya s─▒f─▒r uzunlukta nesneleri i├žin de─čerlendirmek False . Di─čer her ┼čey de─čerlendirir True . Boolean i┼člemleri soldan sa─ča de─čerlendirilir ve i┼členene Do─čru veya Yanl─▒┼č de─čil d├Ând├╝r├╝r.

Bir ├Ârnek g├Ârelim:

 >>> 'Some string' or 1/0 
'Some string'
>>>
 

Yana 'Some string' olarak de─čerlendirilirse True , geri kalan─▒ or de─čerlendirilmez ve y├╝kseltilmi┼č s─▒f─▒r hata bir ay─▒r─▒m yoktur.

Ancak, sipari┼či de─či┼čtirirsek ├Ânce sipari┼č 1/0 de─čerlendirilir ve bir istisna ortaya ├ž─▒kar:

 >>> 1/0 or 'Some string'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
>>> 
 

Bir anahtar olup olmad─▒─č─▒n─▒ kontrol etmek i├žin bunu desen i├žin kullanabiliriz.

 (k in d and 'blah')
 

ayn─▒s─▒n─▒ yapar

 if k in d:
    'blah'
else:
    False
 

Anahtar zaten varsa bu zaten do─čru sonucu verir, ancak olmad─▒─č─▒nda 'boo' yazmas─▒n─▒ istiyoruz. Demek ki sonu├ž almak ve or bunu 'boo'

 >>> False or 'boo'
'boo'
>>> 'blah' or 'boo'
'blah'
>>> 
 

4







Sen kullanabilirsiniz for o yok veya kullan─▒lm─▒yorsa o kontrol├╝nden sonra, s├Âzl├╝─če tekrarlatacak d├Âng├╝ ve s├Âzl├╝kte bulmak istedi─činiz anahtar─▒n ad─▒n─▒ almak if ko┼čulu:

 dic = {'first' : 12, 'second' : 123}
for each in dic:
    if each == 'second': 
        print('the key exists and the corresponding value can be updated in the dictionary')
 

1



─░lgili yay─▒nlar


Bir anahtar─▒n s├Âzl├╝kte olup olmad─▒─č─▒n─▒ nas─▒l kontrol edebilirim? [├žift]

Belirli bir anahtar─▒n bir s├Âzl├╝kte zaten var olup olmad─▒─č─▒n─▒ kontrol edin

Bir tabloda belirli bir indeks olup olmad─▒─č─▒n─▒ nas─▒l kontrol edersiniz?

JQuery taraf─▒ndan se├žilen bir se├žene─čin zaten mevcut olup olmad─▒─č─▒n─▒ nas─▒l kontrol edebilirim

Nesnenin zaten bir listede olup olmad─▒─č─▒n─▒ kontrol etme

jQuery - DOM ├Â─česinin zaten var olup olmad─▒─č─▒n─▒ kontrol edin

ObjectStateManager'da ayn─▒ anahtara sahip bir nesne zaten var. ObjectStateManager, ayn─▒ anahtarla birden fazla nesneyi izleyemiyor

Python, anahtar listesinin s├Âzl├╝kte olup olmad─▒─č─▒n─▒ kontrol eder.

Ruby'de bir s─▒n─▒f─▒n var olup olmad─▒─č─▒ nas─▒l kontrol edilir?

SQL Server 2005'te k├╝melenmemi┼č bir dizin olup olmad─▒─č─▒n─▒ nas─▒l kontrol ederim?

Etiketle ilgili di─čer sorular [python]


─░ki farkl─▒ daldaki dosyalar nas─▒l kar┼č─▒la┼čt─▒r─▒l─▒r?

Div'de kesinlikle konumland─▒r─▒lm─▒┼č eleman nas─▒l ortalan─▒r?

Android'de INSTALL_FAILED_INSUFFICIENT_STORAGE hatas─▒n─▒n ├ž├Âz├╝m├╝ [kapal─▒]

JavaScriptÔÇÖteki 2 tarih aras─▒ndaki farktan haberdar olun [├žift]

OS X Terminal Renkleri [kapal─▒]

Hangi jQuery versiyonunun y├╝kl├╝ oldu─čunu kontrol etmek i├žin

Dizi dizi d├Ân├╝┼čt├╝rmek nas─▒l?

JavaScript'te i├ž i├že d├Âng├╝lerden kopman─▒n en iyi yolu nedir?

C++ ├žok sat─▒rl─▒ dize de─či┼čmez

Dize'yi Java'da ikiye katlamak