이미 사전 확인란 해당 키

내가 원하는 값을 업데이트 전에 사전 테스트하려면 존재하는 경우 주요 핵심. 내가 쓴 다음 코드:

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

내 생각엔 이 작업을 수행하는 가장 좋은 방법은 아니다. 사전에 키의 테스트하려면 더 나은 방법이 있나요?

질문에 대한 의견 (5)
해결책

'에서' 는 '핵심' 의 존재를 테스트하려면 운행에서어떠한 고안되었습니다 딕트.

d = dict()

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

항상 flfile. 딕트리제 () ',' 그들이성년에 경우 기본 수 있습니다.

d = dict()

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

. 만일 당신이 원하는 모든 주요 수 있도록 항상 '에서' 모음 '데포트디스 기본값입니다 사용할 수 있습니다' 같은 모듈에서는 있습니다.

from collections import defaultdict

d = defaultdict(int)

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

. 그러나 일반적으로 '키워드' 에서 이를 위한 가장 좋은 방법입니다.

해설 (6)

39, don& 호출할 수 없는 너 키:

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

빠른 많은 되는 것처럼, s # 39 는 dictionary& 하고 있으며, 반대로 호출하십시오 키 해싱 선형 검색 할 수 있을 것 "이라고 말했다.

해설 (13)

키를 사용하여 존재를 위한 사전 테스트할 수 있습니다, b&gt &lt in&lt /b>;; 키워드:


d = {'a': 1, 'b': 2}
'a' in d # 
해설 (3)

이 줄일 수 있습니다.

if 'key1' in dict:
    ...

그러나 이는 기껏해야 코스메틱 개선. 왜 그렇게 믿는 것이 가장 좋은 방법은?

해설 (4)

자세한 정보는 제안된 방법 # 39 의 실행 속도가 수락됨 answer& 10m (루프):

39, & # 39 key& - '; 삼성전자는 지난 시간 '에서 1.07 미딕트

(# 39, & # 39, key&) '-' 미딕트리제 1.84cm 초 경과 시간 [# 39, & # 39, key&] '-' 미드포트디스 경과 시간 107 초

따라서 '에서' 또는 '대한' 권장됨 데포트디스 사용하여 'get'.

해설 (2)

난 '이 아닌' 세드포트 방법을 사용하는 것이 좋습니다. 이 말은 운영까지도 모든 일을 다 할 것입니다.

>>> 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}
해설 (6)

Python 에서 사전 프레젠테이션이든 (& # 39, 기본 key& # 39,) 는 메서드입니다. 그냥 경우 키를 설정할 수 있도록 기본값입니다 없다.

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

어떤 격자선 이프프 (용서를 더 이상 사용 권한):

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

그래서 다른 지켜보리니 포스트:

https://stackoverflow.com/questions/1835756/using-try-vs-if-in-python 또는

https://stackoverflow.com/questions/204308/checking-for-member-existence-in-python

해설 (1)

삼항 연산자를 사용하여.

message = "blah" if 'key1' in dict else "booh"
print(message)
해설 (0)
  • Are:* 결과를 얻을 수 있는 방법을
  • 만약 your_dict.has_key (키) [제거한 파이썬 3] [1]
  • 이 키를 your_dict
  • 종료기 해당하며 블록
  • 어떤 것이 더 종속적임 things:* 3 가
  1. 39, & # 39 는, 일반적으로 key& 산아래의 사전 # 39, & # 39, 또는 일반적으로 key& 있지 않습니다.

  2. 사용하려는 실행하십시오 같은 조건을 이프리엘즈리얼세이프리얼스?
  3. 사전 크기가 얼마나 큰가?

자세한 정보: http://paltman.com/try-except-performance-in-python-a-simple-test/

39, & # 39 in& / 차단 시도하시겠습니까 대신 사용할 수 있습니다. # 39, & # 39, 또는 if&.

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."

[1]: https://docs.python.org/3.1/whatsnew/3.0.html # 기본 제공

해설 (1)

&lt H2&gt, 파이썬, 2 만: (및 파이썬 2.7 汲摹窍妨绰 '에서' 이미) &lt /H2>;

has_key () 메서드를 사용할 수 있습니다.

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

그냥 오버클로킹된 FYI 추가 크리스씨가. B (해답을):

d = defaultdict(int)

잘 작동합니다. 호출 int () '' 0 '되돌려줍니다 때문이다' '에서 원하는거요 뭐라구오 데포트디스 배경 지식 (구성할 때 사전) 는 전기회로의 Function&quot 팩터리의 "; 의 문서.

해설 (1)

&gt. # 확인란 해당 키 이미 사전

아이디어를 얻기 위해 우리가 할 수 있는 어떤 방법으로 부를 수 있는 사전이므로 먼저 검사 방법 다음은 방법:

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

이들의 잔혹한 방법으로 얻을 수 있는지 확인하는 주요 이미 ' ()' 방법:

d.get("key")
    • Lionbridge 다른 두 가지 방법 '항목 ()' 와 '키 ()' 하는 소리가 너무 좋았다. # 39 의 경우 let& 검사할 수 있어 ' ()' 가 우리를 위한 올바른 방법. 우리는 우리의 딕트 영업사원이에요 ':
d= {'clear':0, 'copy':1, 'fromkeys':2, 'get':3, 'items':4, 'keys':5, 'pop':6, 'popitem':7, 'setdefault':8, 'update':9, 'values':10}

39, 반환되므로 '없음' 의 주요 저희에게는힘과 don& 인쇄면이 fs@snapa 없다.

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

우리는 strike&gt may&lt /strike&gt <;;; 정보를 얻기 위해 사용하는 경우 키 (key) 는 현재 또는 아닙니다. 그러나 이 경우 한 번의 '우리가 만든 딕트 고려해보십시오 주요 컨투어로 없음':

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

주요 일부 값을 얻을 수 있는 '신뢰할 수 있는 방법을 사용하지 않는 경우 ()' '없음'. 이 이야기는 기간말 더 있어야 합니다. 만약 우리가 사용하는 '에서' 비교자:

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

우리 정확한 결과를 얻을 수 있습니다. 파이썬 바이트 코드 검사할 수 있습니다.

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

그보다 더 신뢰할 수 있는 것은 단지 이 보여주는 '에서' 보다 '프레젠테이션이든 비교 연산자 ()'.

해설 (1)

Python 은 메서드로부터 contains 불렀으매 '사전'. 이 방법은 다른 키를 가지고 있으면 참 반환되므로 사전에 되돌려줍니다 거짓값.

 >>> 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.
해설 (3)

한 번 더 있는지 확인하는 방법을 사용하여 부울을 공유함을 주요 존재하는 것으로 알려졌다.

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

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

이 되돌려줍니다

>>> blah
>>> blah
>>> boo
>>> boo
    • 설명

그런 점에서 '없음' 또는 '0', 파이썬, 먼저 알아야 할 길이 평가하십시오 객체에는 제로 'False' 로. 다른 건 다 로 평가되는 'True'. 왼쪽에서 오른쪽, 진실 혹은 거짓 없는 반품해야 피연산자를 부울입니다 운영체 평가됩니다.

39 의 지켜보리니 let& 예:

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

39, & # 39, 일부 string& '이후' 는 '또는' 아니다 'True' 로, 나머지 사단 by zero error: 뚜르산을 평가하실 없다.

먼저 '주문' 1/0 신앙이니라 바꿔요 검사됩니다 예외를 던진다.

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

이 경우 우리가 사용할 수 있는 중요한 체크 패턴이 있습니다.

(k in d and 'blah')

동일합니까 않습니다.

if k in d:
    'blah'
else:
    False

이 경우 이미 되돌려줍니다 인쇄하려면 & # 39 이 올바른 결과를 주요 존재하지만, 우리가 원하는 boo& # 39. # 39 doesn& 때, t. 그래서 우리는 이 문제를 '& # 39 boo& 시행하십시오 결과,' 또는 ',' # 39.

>>> False or 'boo'
'boo'
>>> 'blah' or 'boo'
'blah'
>>> 
해설 (0)

반복할 수 있으며, 루프 '를 사용할 수 있습니다' 우리말 이름을 찾을 수 있는지, 이후에는 주요 운영까지도 사용하지 않을 경우 해당 사전에서 '또는' 조건:

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')
해설 (2)