source

지정된 키가 사전에 이미 있는지 확인합니다.

factcode 2022. 9. 6. 22:15
반응형

지정된 키가 사전에 이미 있는지 확인합니다.

키의 값을 업데이트하기 전에 사전에 키가 있는지 테스트하고 싶었습니다.다음 코드를 작성했습니다.

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

저는 이것이 이 작업을 수행하는 최선의 방법이 아니라고 생각합니다.사전에서 키를 테스트하는 더 좋은 방법이 있나요?

in 는 에 키가 존재하는지 여부를 테스트합니다.

d = {"key1": 10, "key2": 23}

if "key1" in d:
    print("this will execute")

if "nonexistent key" in d:
    print("this will not")

키가 존재하지 않을 때 기본값을 제공하기 위해 사용합니다.

d = {}

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

모든 키에 기본값을 지정하려면 각 할당에서 다음 중 하나를 사용합니다.

d = {}

for i in range(10):
    d[i] = d.setdefault(i, 0) + 1

또는 모듈에서 사용합니다.

from collections import defaultdict

d = defaultdict(int)

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

key in my_dict key in my_dict.keys():

if 'key1' in my_dict:
    print("blah")
else:
    print("boo")

이는 키 목록에서 O(n) 선형 검색을 수행하는 대신 사전의 O(1) 해시를 사용하기 때문에 훨씬 더 빠릅니다.

in 키워드를 사용하여 딕셔너리에 키가 존재하는지 테스트할 수 있습니다.

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

변환하기 전에 사전에서 키의 존재를 확인하는 일반적인 용도는 값을 기본값으로 초기화하는 것입니다(예를 들어 값이 목록인 경우, 키의 첫 번째 값을 삽입할 때 추가할 수 있는 빈 목록이 있는지 확인하는 경우 등).이러한 경우 관심 있는 유형을 찾을 수 있습니다.

코드에서는 '어느 '라는 .has_key()되지 않는 를 합니다).key_name in dict_name(어느 쪽인가)

코드를 다음과 같이 줄일 수 있습니다.

if 'key1' in my_dict:
    ...

그러나 이것은 기껏해야 외관상의 개선일 뿐이다.왜 이게 최선책이 아니라고 생각하죠?

승인된 답변의 제안 방법 실행 속도(1천만 루프)에 대한 추가 정보는 다음과 같습니다.

  • 'key' in mydict 1
  • mydict.get('key') 1
  • mydefaultdict['key'] 1

""를 사용합니다.in ★★★★★★★★★★★★★★★★★」defaultdictget.

를 사용하는 것을 추천합니다.setdefault대신 메서드를 사용합니다.네가 원하는 건 다 할 수 있을 것 같아.

>>> 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}

에는 Python이 .get('key', default) 됩니다.만약의 경우 아무 키나지 않다 그러니까 그냥 기본 값 설정할 수 있습니다.

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

를 사용하여 파이썬 3항 연산자:.

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

EAFP를 사용합니다(허가보다 용서를 구하는 것이 쉽습니다).

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

다른 스택 오버플로우 투고를 참조해 주세요.

지정된 키가 사전에 이미 있는지 확인합니다.

그 방법을 알기 위해서는 먼저 사전에 호출할 수 있는 메서드를 조사합니다.

방법은 다음과 같습니다.

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

은 '키'가 있을 수 .get()★★★★

d.get("key")

다른 두 가지 흥미로운 방법은items() ★★★★★★★★★★★★★★★★★」keys()그러면그러니까그러면그러니까그러면어느쪽인지한번살펴볼까요?get()적절한 방법입니다.요.d:

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

됩니다.None:

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

키가 있는지 없는지 정보를 얻기 위해 사용합니다., 는 이 해 주십시오.key:None:

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

을 이끌다get()일부 값이 다음과 같은 경우 방법은 신뢰할 수 없습니다.None.

이 이야기는 더 행복한 결말을 맺어야 한다.하면, 「」를 사용합니다.in★★★★★★★★★★★★★★★★★★:

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

올바른 결과를 얻을 수 있습니다.

Python 바이트 코드를 조사할 수 있습니다.

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

보면 알 수 있어요.in만 아니라 compare 연산자보다 입니다.get().

결과를 얻을 수 있는 방법은 다음과 같습니다.

  • Python 3에서 사용자의_dict.has_key(key)가 삭제된 경우
  • if 키 입력
  • 시도/제외 블록

다음 3가지 사항에 따라 어떤 것이 더 나은가?

  1. 사전이 '일반적으로 키가 있다' 또는 '일반적으로 키가 없다' 중 어느 쪽입니까?
  2. 당신은 만약...엘세 같은 조건을 사용할 생각입니까?.contractif...contract?
  3. 사전은 얼마나 큰가요?

상세내용 : http://paltman.com/try-except-performance-in-python-a-simple-test/

'in' 또는 'if' 대신 try/block 사용:

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

Python 2만: (Python 2.7은 이미 "in"을 지원합니다.)

.has_key()★★★★

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

Chris에 참고인만 더하면 돼. B의 (최선의) 답변:

d = defaultdict(int)

가능하기 에, 그 는, 전화하는 입니다.이유는 호출이int()0 '그것'이defaultdict는 (사전 작성 시) 백그라운드에서 작업을 수행하므로 설명서에서 "공장 기능"이라는 이름을 사용합니다.

에는 Python이라는 .__contains__이 메서드는 사전에 키가 있으면 True를 반환하고 그렇지 않으면 False를 반환합니다.

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

부울 연산자를 사용하여 키가 존재하는지 확인하는 다른 방법:

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,None은 0으로 False기타 모든 것은 다음과 같이 평가됩니다.True. 부울 연산은 왼쪽에서 오른쪽으로 평가되며 피연산자는 True 또는 False가 아닙니다.

예를 들어 보겠습니다.

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

부터'Some string'까지 평가하다.True, 그 외의 경우or는 평가되지 않으며 제로 나눗셈 오류가 발생하지 않습니다.

하지만 순서를 바꾸면1/0먼저 평가되고 예외가 발생합니다.

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

키가 있는지 확인하기 위한 패턴으로 사용할 수 있습니다.

(k in d and 'blah')

같은 일을 하다

if k in d:
    'blah'
else:
    False

키가 있으면 이미 올바른 결과가 반환되지만, 키가 없으면 "boo"로 출력해 주셨으면 합니다.그래서 결과를 가져와서or와 함께 하다'boo'

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

를 사용할 수 있습니다.forloop을 클릭하여 사전에서 찾고 싶은 키의 이름을 가져옵니다.그 후 사용 여부를 확인한다.if★★★★

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')

언급URL : https://stackoverflow.com/questions/1602934/check-if-a-given-key-already-exists-in-a-dictionary

반응형