etc./StackOverFlow

사전에 새 키를 추가하려면 어떻게 해야 합니까?

청렴결백한 만능 재주꾼 2021. 10. 27. 23:24
반응형

질문자 :lfaraone


Python 사전이 생성된 후 키를 추가할 수 있습니까?

.add() 메서드가 없는 것 같습니다.



해당 키에 값을 할당하여 사전에 새 키/값 쌍을 만듭니다.

 d = {'key': 'value'} print(d) # {'key': 'value'} d['mynewkey'] = 'mynewvalue' print(d) # {'key': 'value', 'mynewkey': 'mynewvalue'}

키가 없으면 키가 추가되고 해당 값을 가리킵니다. 존재하는 경우 가리키는 현재 값을 덮어씁니다.


Paolo Bergantino

여러 키를 동시에 추가하려면 dict.update() 사용하십시오.

 >>> x = {1:2} >>> print(x) {1: 2} >>> d = {3:4, 5:6, 7:8} >>> x.update(d) >>> print(x) {1: 2, 3: 4, 5: 6, 7: 8}

단일 키를 추가하는 경우 허용되는 답변은 계산 오버헤드가 적습니다.


user142911

Python 사전에 대한 정보를 통합하고 싶습니다.

빈 사전 만들기

 data = {} # OR data = dict()

초기 값으로 사전 만들기

 data = {'a': 1, 'b': 2, 'c': 3} # OR data = dict(a=1, b=2, c=3) # OR data = {k: v for k, v in (('a', 1), ('b',2), ('c',3))}

단일 값 삽입/업데이트

 data['a'] = 1 # Updates if 'a' exists, else adds 'a' # OR data.update({'a': 1}) # OR data.update(dict(a=1)) # OR data.update(a=1)

여러 값 삽입/업데이트

 data.update({'c':3,'d':4}) # Updates 'c' and adds 'd'

파이썬 3.9 이상:

업데이트 연산자 |= 이제 사전에서 작동합니다.

 data |= {'c':3,'d':4}

원본을 수정하지 않고 병합된 사전 만들기

 data3 = {} data3.update(data) # Modifies data3, not data data3.update(data2) # Modifies data3, not data2

파이썬 3.5 이상:

이것은 사전 압축 풀기 라는 새로운 기능을 사용합니다.

 data = {**data1, **data2, **data3}

파이썬 3.9 이상:

병합 연산자 | 이제 사전에서 작동합니다.

 data = data1 | {'c':3,'d':4}

사전에서 항목 삭제

 del data[key] # Removes specific element in a dictionary data.pop(key) # Removes the key & returns the value data.clear() # Clears entire dictionary

키가 이미 사전에 있는지 확인

 key in data

사전의 쌍을 통해 반복

 for key in data: # Iterates just through the keys, ignoring the values for key, value in d.items(): # Iterates through the pairs for key in d.keys(): # Iterates just through key, ignoring the values for value in d.values(): # Iterates just through value, ignoring the keys

두 목록에서 사전 만들기

 data = dict(zip(list_with_keys, list_with_values))

Yugal Jindle

"Python 사전이 생성된 후 키를 추가할 수 있습니까? .add() 메서드가 없는 것 같습니다."

예, 가능하며 이를 구현하는 방법이 있지만 직접 사용하고 싶지는 않습니다.

사용 방법과 사용하지 않는 방법을 보여주기 위해 사전 리터럴 {} 사용하여 빈 사전을 생성해 보겠습니다.

 my_dict = {}

모범 사례 1: 첨자 표기법

이 사전을 단일 새 키와 값으로 업데이트하려면 항목 할당을 제공 하는 아래 첨자 표기법(여기에서 매핑 참조)을 사용할 수 있습니다.

 my_dict['new key'] = 'new value'

my_dict 는 현재 다음과 같습니다.

 {'new key': 'new value'}

모범 사례 2: update 방법 - 2가지 방법

update 메서드를 사용하여 여러 값으로 dict를 효율적으로 업데이트할 수도 있습니다. 여기에서 dict 생성할 수 있으므로 dict 이 이미 생성되어 다른 용도로 사용되었거나 다른 용도로 사용되기를 바랍니다.

 my_dict.update({'key 2': 'value 2', 'key 3': 'value 3'})

my_dict 는 현재 다음과 같습니다.

 {'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value'}

update 메소드를 사용하여 이를 수행하는 또 다른 효율적인 방법은 키워드 인수를 사용하는 것이지만 합법적인 파이썬 단어여야 하기 때문에 공백이나 특수 기호를 사용하거나 이름을 숫자로 시작할 수 없지만 많은 사람들이 이것을 더 읽기 쉬운 방법으로 생각합니다. dict에 대한 키를 생성하고 여기서 불필요한 dict 생성을 확실히 피할 수 있습니다.

 my_dict.update(foo='bar', foo2='baz')

my_dict 는 다음과 같습니다.

 {'key 2': 'value 2', 'key 3': 'value 3', 'new key': 'new value', 'foo': 'bar', 'foo2': 'baz'}

dict 를 업데이트하는 세 가지 Pythonic 방법을 다루었습니다.


마법의 방법, __setitem__ 및 피해야 하는 이유

__setitem__ 메서드를 사용하는 사용해서는 안 dict 을 업데이트하는 또 다른 방법이 있습니다. 다음은 __setitem__ dict 키-값 쌍을 추가하는 방법의 예와 사용 시 성능 저하에 대한 데모입니다.

 >>> d = {} >>> d.__setitem__('foo', 'bar') >>> d {'foo': 'bar'} >>> def f(): ... d = {} ... for i in xrange(100): ... d['foo'] = i ... >>> def g(): ... d = {} ... for i in xrange(100): ... d.__setitem__('foo', i) ... >>> import timeit >>> number = 100 >>> min(timeit.repeat(f, number=number)) 0.0020880699157714844 >>> min(timeit.repeat(g, number=number)) 0.005071878433227539

따라서 아래 첨자 표기법을 사용하는 것이 실제로 __setitem__ 사용하는 것보다 훨씬 빠릅니다. Pythonic 작업을 수행하는 것, 즉 의도된 방식으로 언어를 사용하는 것은 일반적으로 더 읽기 쉽고 계산적으로 효율적입니다.


Aaron Hall

dictionary[key] = value

Jason Creighton

사전에 사전을 추가하려면 이 방법으로 할 수 있습니다.

예: 사전 및 하위 사전에 새 항목 추가

 dictionary = {} dictionary["new key"] = "some new entry" # add new dictionary entry dictionary["dictionary_within_a_dictionary"] = {} # this is required by python dictionary["dictionary_within_a_dictionary"]["sub_dict"] = {"other" : "dictionary"} print (dictionary)

산출:

 {'new key': 'some new entry', 'dictionary_within_a_dictionary': {'sub_dict': {'other': 'dictionarly'}}}

참고: Python에서는 먼저 하위 항목을 추가해야 합니다.

 dictionary["dictionary_within_a_dictionary"] = {}

항목을 추가하기 전에.


Asher

일반적인 구문은 d[key] = value 이지만 키보드에 대괄호 키가 없으면 다음을 수행할 수도 있습니다.

 d.__setitem__(key, value)

__getitem____setitem__ 메서드를 정의하는 것은 대괄호 구문을 지원하는 클래스를 만드는 방법입니다. Python 시작하기, 5.6을 참조하십시오. 특수 클래스 방법 .


Colonel Panic

다음 중 하나를 만들 수 있습니다.

 class myDict(dict): def __init__(self): self = dict() def add(self, key, value): self[key] = value ## example myd = myDict() myd.add('apples',6) myd.add('bananas',3) print(myd)

제공:

 >>> {'apples': 6, 'bananas': 3}

kiriloff

이 인기 있는 질문 ab 를 병합 하는 기능적 방법을 다룹니다.

다음은 보다 간단한 방법 중 일부입니다(Python 3에서 테스트됨)...

 c = dict( a, **b ) ## see also https://stackoverflow.com/q/2255878 c = dict( list(a.items()) + list(b.items()) ) c = dict( i for d in [a,b] for i in d.items() )

참고: 위의 첫 번째 방법은 b 의 키가 문자열인 경우에만 작동합니다.

단일 요소를 추가하거나 수정하려면 b 사전에는 해당 요소가 하나만 포함됩니다...

 c = dict( a, **{'d':'dog'} ) ## returns a dictionary based on 'a'

이것은 동등합니다 ...

 def functional_dict_add( dictionary, key, value ): temp = dictionary.copy() temp[key] = value return temp c = functional_dict_add( a, 'd', 'dog' )

Brent Bradburn

하자 당신이 불변의 세계에 살고 싶은 원본을 수정할하지만 새로운 만들려하지 않는 척 dict 원본과 새 키를 추가하는 결과이다.

Python 3.5 이상에서는 다음을 수행할 수 있습니다.

 params = {'a': 1, 'b': 2} new_params = {**params, **{'c': 3}}

Python 2에 해당하는 것은 다음과 같습니다.

 params = {'a': 1, 'b': 2} new_params = dict(params, **{'c': 3})

다음 중 하나 이후:

params 는 여전히 {'a': 1, 'b': 2}

그리고

new_params{'a': 1, 'b': 2, 'c': 3}

원본을 수정하고 싶지 않은 경우가 있습니다(원본에 추가한 결과만 원함). 나는 이것이 다음에 대한 상쾌한 대안을 찾습니다.

 params = {'a': 1, 'b': 2} new_params = params.copy() new_params['c'] = 3

또는

 params = {'a': 1, 'b': 2} new_params = params.copy() new_params.update({'c': 3})

참고: `dict(d1, **d2)` 표현에서 `**`는 무엇을 의미합니까?


campeterson

이름이 이상하고 동작이 이상하지만 여전히 편리한dict.setdefault() 있습니다.

이것

 value = my_dict.setdefault(key, default)

기본적으로 다음을 수행합니다.

 try: value = my_dict[key] except KeyError: # key not found value = my_dict[key] = default

예,

 >>> mydict = {'a':1, 'b':2, 'c':3} >>> mydict.setdefault('d', 4) 4 # returns new value at mydict['d'] >>> print(mydict) {'a':1, 'b':2, 'c':3, 'd':4} # a new key/value pair was indeed added # but see what happens when trying it on an existing key... >>> mydict.setdefault('a', 111) 1 # old value was returned >>> print(mydict) {'a':1, 'b':2, 'c':3, 'd':4} # existing key was ignored

Michael Ekoka

두 개의 사전을 결합하지 않고 사전에 새 키-값 쌍을 추가하는 경우 아래 첨자 표기법을 사용하는 것이 가장 좋은 방법인 것 같습니다.

 import timeit timeit.timeit('dictionary = {"karga": 1, "darga": 2}; dictionary.update({"aaa": 123123, "asd": 233})') >> 0.49582505226135254 timeit.timeit('dictionary = {"karga": 1, "darga": 2}; dictionary["aaa"] = 123123; dictionary["asd"] = 233;') >> 0.20782899856567383

그러나 예를 들어 수천 개의 새로운 키-값 쌍을 추가하려면 update() 메서드 사용을 고려해야 합니다.


Burak Özdemir

여기에 내가 보지 못한 또 다른 방법이 있습니다.

 >>> foo = dict(a=1,b=2) >>> foo {'a': 1, 'b': 2} >>> goo = dict(c=3,**foo) >>> goo {'c': 3, 'a': 1, 'b': 2}

사전 생성자와 암시적 확장을 사용하여 사전을 재구성할 수 있습니다. 게다가 흥미롭게도 이 방법은 사전 생성(Python 3.6 이후) 동안 위치 순서를 제어하는 데 사용할 수 있습니다. 사실, 삽입 순서는 Python 3.7 이상에서 보장됩니다!

 >>> foo = dict(a=1,b=2,c=3,d=4) >>> new_dict = {k: v for k, v in list(foo.items())[:2]} >>> new_dict {'a': 1, 'b': 2} >>> new_dict.update(newvalue=99) >>> new_dict {'a': 1, 'b': 2, 'newvalue': 99} >>> new_dict.update({k: v for k, v in list(foo.items())[2:]}) >>> new_dict {'a': 1, 'b': 2, 'newvalue': 99, 'c': 3, 'd': 4} >>>

위는 사전 이해를 사용하고 있습니다.


ingyhere

먼저 키가 이미 존재하는지 확인하려면 다음을 수행하십시오.

 a={1:2,3:4} a.get(1) 2 a.get(5) None

그런 다음 새 키와 값을 추가할 수 있습니다.


Agus Mathew

대괄호를 사용할 수 있습니다.

 my_dict = {} my_dict["key"] = "value"

또는 .update() 메서드를 사용할 수 있습니다.

 my_another_dict = {"key": "value"} my_dict = {} my_dict.update(my_another_dict)

Abhimanyu Sharma

나는 또한 사전, 특히 defaultdict 에서 데이터 유형 의 추가 및 수정을 단순화하는 많은 유용한 사전 하위 클래스와 래퍼로 구성된 collections 모듈을 지적하는 것이 유용할 것이라고 생각합니다.

누락된 값을 제공하기 위해 팩토리 함수를 호출하는 dict 서브클래스

이것은 항상 동일한 데이터 유형 또는 구조로 구성된 사전(예: 목록 사전)으로 작업하는 경우에 특히 유용합니다.

 >>> from collections import defaultdict >>> example = defaultdict(int) >>> example['key'] += 1 >>> example['key'] defaultdict(<class 'int'>, {'key': 1})

키가 아직 존재하지 않는 경우 defaultdict 는 주어진 값(이 경우 10 )을 사전에 초기 값으로 할당합니다(종종 루프 내에서 사용됨). 그것은 (질문에 따라) 사전에 새 키를 추가하고, 키가 아직 존재하지 않는 경우 값을 할당 :이 작업은 따라서 두 가지 작업을 수행합니다. += 작업이 아직 존재하지 않는 값에 액세스하려고 할 때 오류가 발생했을 것입니다.

 >>> example = dict() >>> example['key'] += 1 Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'key'

defaultdict 사용하지 않으면 새 요소를 추가하는 코드의 양이 훨씬 더 많아지고 다음과 같이 보일 수 있습니다.

 # This type of code would often be inside a loop if 'key' not in example: example['key'] = 0 # add key and initial value to dict; could also be a list example['key'] += 1 # this is implementing a counter

defaultdict listset 과 같은 복잡한 데이터 유형에도 사용할 수 있습니다.

 >>> example = defaultdict(list) >>> example['key'].append(1) >>> example defaultdict(<class 'list'>, {'key': [1]})

요소를 추가하면 목록이 자동으로 초기화됩니다.


m_____z

여기 쉬운 방법이 있습니다!

 your_dict = {} your_dict['someKey'] = 'someValue'

key = someKeyvalue = somevalue your_dict 사전 key: value 쌍을 추가합니다.

또한 키의 값을 업데이트하려면이 방법을 사용할 수 있습니다 somekey 즉 이미 존재하는 경우 your_dict .


Irfan wani

사전(키, 값) 클래스를 추가합니다.

 class myDict(dict): def __init__(self): self = dict() def add(self, key, value): #self[key] = value # add new key and value overwriting any exiting same key if self.get(key)!=None: print('key', key, 'already used') # report if key already used self.setdefault(key, value) # if key exit do nothing ## example myd = myDict() name = "fred" myd.add('apples',6) print('\n', myd) myd.add('bananas',3) print('\n', myd) myd.add('jack', 7) print('\n', myd) myd.add(name, myd) print('\n', myd) myd.add('apples', 23) print('\n', myd) myd.add(name, 2) print(myd)

Susan

사전을 업데이트하는 방법에는 두 가지가 있습니다.

  1. 대괄호 표기법( [] ) 사용

     my_dict = {} my_dict['key'] = 'value'
  2. update() 메서드 사용

     my_dict = {} my_dict.update({'key': 'value'})

Pobaranchuk

your_dict = {}

새 키를 추가하려면:

  1. your_dict[key]=value

  2. your_dict.update(key=value)


Odiljon Djamalov

출처 : http:www.stackoverflow.com/questions/1024847/how-can-i-add-new-keys-to-a-dictionary

반응형