Python 사전이 생성된 후 키를 추가할 수 있습니까?
.add()
메서드가 없는 것 같습니다.
질문자 :lfaraone
Python 사전이 생성된 후 키를 추가할 수 있습니까?
.add()
메서드가 없는 것 같습니다.
해당 키에 값을 할당하여 사전에 새 키/값 쌍을 만듭니다.
d = {'key': 'value'} print(d) # {'key': 'value'} d['mynewkey'] = 'mynewvalue' print(d) # {'key': 'value', 'mynewkey': 'mynewvalue'}
키가 없으면 키가 추가되고 해당 값을 가리킵니다. 존재하는 경우 가리키는 현재 값을 덮어씁니다.
여러 키를 동시에 추가하려면 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}
단일 키를 추가하는 경우 허용되는 답변은 계산 오버헤드가 적습니다.
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'
업데이트 연산자 |=
이제 사전에서 작동합니다.
data |= {'c':3,'d':4}
data3 = {} data3.update(data) # Modifies data3, not data data3.update(data2) # Modifies data3, not data2
이것은 사전 압축 풀기 라는 새로운 기능을 사용합니다.
data = {**data1, **data2, **data3}
병합 연산자 |
이제 사전에서 작동합니다.
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))
"Python 사전이 생성된 후 키를 추가할 수 있습니까? .add() 메서드가 없는 것 같습니다."
예, 가능하며 이를 구현하는 방법이 있지만 직접 사용하고 싶지는 않습니다.
사용 방법과 사용하지 않는 방법을 보여주기 위해 사전 리터럴 {}
사용하여 빈 사전을 생성해 보겠습니다.
my_dict = {}
이 사전을 단일 새 키와 값으로 업데이트하려면 항목 할당을 제공 하는 아래 첨자 표기법(여기에서 매핑 참조)을 사용할 수 있습니다.
my_dict['new key'] = 'new value'
my_dict
는 현재 다음과 같습니다.
{'new key': 'new value'}
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 작업을 수행하는 것, 즉 의도된 방식으로 언어를 사용하는 것은 일반적으로 더 읽기 쉽고 계산적으로 효율적입니다.
dictionary[key] = value
사전에 사전을 추가하려면 이 방법으로 할 수 있습니다.
예: 사전 및 하위 사전에 새 항목 추가
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"] = {}
항목을 추가하기 전에.
일반적인 구문은 d[key] = value
이지만 키보드에 대괄호 키가 없으면 다음을 수행할 수도 있습니다.
d.__setitem__(key, value)
__getitem__
및 __setitem__
메서드를 정의하는 것은 대괄호 구문을 지원하는 클래스를 만드는 방법입니다. Python 시작하기, 5.6을 참조하십시오. 특수 클래스 방법 .
다음 중 하나를 만들 수 있습니다.
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}
이 인기 있는 질문 a
와 b
를 병합 하는 기능적 방법을 다룹니다.
다음은 보다 간단한 방법 중 일부입니다(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' )
하자 당신이 불변의 세계에 살고 싶은 원본을 수정할하지만 새로운 만들려하지 않는 척 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.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
두 개의 사전을 결합하지 않고 사전에 새 키-값 쌍을 추가하는 경우 아래 첨자 표기법을 사용하는 것이 가장 좋은 방법인 것 같습니다.
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()
메서드 사용을 고려해야 합니다.
여기에 내가 보지 못한 또 다른 방법이 있습니다.
>>> 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} >>>
위는 사전 이해를 사용하고 있습니다.
먼저 키가 이미 존재하는지 확인하려면 다음을 수행하십시오.
a={1:2,3:4} a.get(1) 2 a.get(5) None
그런 다음 새 키와 값을 추가할 수 있습니다.
대괄호를 사용할 수 있습니다.
my_dict = {} my_dict["key"] = "value"
또는 .update() 메서드를 사용할 수 있습니다.
my_another_dict = {"key": "value"} my_dict = {} my_dict.update(my_another_dict)
나는 또한 사전, 특히 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
list
및 set
과 같은 복잡한 데이터 유형에도 사용할 수 있습니다.
>>> example = defaultdict(list) >>> example['key'].append(1) >>> example defaultdict(<class 'list'>, {'key': [1]})
요소를 추가하면 목록이 자동으로 초기화됩니다.
여기 쉬운 방법이 있습니다!
your_dict = {} your_dict['someKey'] = 'someValue'
key = someKey
및 value = somevalue
your_dict
사전 key: value
쌍을 추가합니다.
또한 키의 값을 업데이트하려면이 방법을 사용할 수 있습니다 somekey
즉 이미 존재하는 경우 your_dict
.
사전(키, 값) 클래스를 추가합니다.
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)
사전을 업데이트하는 방법에는 두 가지가 있습니다.
대괄호 표기법( []
) 사용
my_dict = {} my_dict['key'] = 'value'
update()
메서드 사용
my_dict = {} my_dict.update({'key': 'value'})
your_dict = {}
새 키를 추가하려면:
your_dict[key]=value
your_dict.update(key=value)
출처 : http:www.stackoverflow.com/questions/1024847/how-can-i-add-new-keys-to-a-dictionary
대소문자를 구분하지 않는 'Contains(string)' (0) | 2021.11.05 |
---|---|
고유한 Android 기기 ID가 있습니까? (0) | 2021.10.27 |
SQLite의 초당 INSERT 성능 향상 (0) | 2021.10.27 |
403 금지됨 대 401 승인되지 않은 HTTP 응답 (0) | 2021.10.27 |
파이썬에서 어떻게 시간 지연(time sleep)을 할 수 있습니까? [duplicate] (0) | 2021.10.27 |