[PYTHON] 사전 키 이름 바꾸기
PYTHON사전 키 이름 바꾸기
그 값을 새 이름으로 재 할당하거나 이전 이름 키를 제거하지 않고 사전 키의 이름을 바꾸는 방법이 있습니까? dict 키 / 값을 통해 반복하지 않고? OrderedDict의 경우 해당 키의 위치를 유지하면서 동일하게 수행하십시오.
해결법
-
==============================
1.일반 dict의 경우 다음을 사용할 수 있습니다.
일반 dict의 경우 다음을 사용할 수 있습니다.
mydict[new_key] = mydict.pop(old_key)
OrderedDict의 경우 이해력을 사용하여 완전히 새로 작성해야한다고 생각합니다.
>>> OrderedDict(zip('123', 'abc')) OrderedDict([('1', 'a'), ('2', 'b'), ('3', 'c')]) >>> oldkey, newkey = '2', 'potato' >>> OrderedDict((newkey if k == oldkey else k, v) for k, v in _.viewitems()) OrderedDict([('1', 'a'), ('potato', 'b'), ('3', 'c')])
이 질문은 물어 보는 것처럼 보이지만 키 자체를 수정하는 것은 dict 키가 숫자, 문자열 또는 튜플과 같이 일반적으로 변경 불가능한 개체이기 때문에 실용적이지 않습니다. 키를 수정하는 대신 새 키에 값을 재 지정하고 이전 키를 제거하는 방법은 파이썬에서 "이름 바꾸기"를 달성하는 방법입니다.
-
==============================
2.1 줄의 가장 좋은 방법 :
1 줄의 가장 좋은 방법 :
>>> d = {'test':[0,1,2]} >>> d['test2'] = d.pop('test') >>> d {'test2': [0, 1, 2]}
-
==============================
3.newkey! = oldkey에 대한 검사를 사용하면 다음과 같이 할 수 있습니다.
newkey! = oldkey에 대한 검사를 사용하면 다음과 같이 할 수 있습니다.
if newkey!=oldkey: dictionary[newkey] = dictionary[oldkey] del dictionary[oldkey]
-
==============================
4.Raymond Hettinger가 작성한이 OrderedDict 레시피를 사용하여 이름 바꾸기 방법을 추가하도록 수정할 수 있지만 복잡성에서는 O (N)이됩니다.
Raymond Hettinger가 작성한이 OrderedDict 레시피를 사용하여 이름 바꾸기 방법을 추가하도록 수정할 수 있지만 복잡성에서는 O (N)이됩니다.
def rename(self,key,new_key): ind = self._keys.index(key) #get the index of old key, O(N) operation self._keys[ind] = new_key #replace old key with new key in self._keys self[new_key] = self[key] #add the new key, this is added at the end of self._keys self._keys.pop(-1) #pop the last item in self._keys
예:
dic = OrderedDict((("a",1),("b",2),("c",3))) print dic dic.rename("a","foo") dic.rename("b","bar") dic["d"] = 5 dic.rename("d","spam") for k,v in dic.items(): print k,v
산출:
OrderedDict({'a': 1, 'b': 2, 'c': 3}) foo 1 bar 2 c 3 spam 5
-
==============================
5.몇 사람 앞에서 한 줄짜리 키를 삭제하고 작성하는 .pop 트릭을 언급했습니다.
몇 사람 앞에서 한 줄짜리 키를 삭제하고 작성하는 .pop 트릭을 언급했습니다.
필자는보다 명시적인 구현을보다 쉽게 읽을 수있다.
d = {'a': 1, 'b': 2} v = d['b'] del d['b'] d['c'] = v
위의 코드는 { 'a': 1, 'c': 2}를 반환합니다.
-
==============================
6.다른 대답은 꽤 좋다.하지만 python3.6에서는 정규 dict도 순서를 가진다. 따라서 일반적인 경우 키 위치를 유지하기가 어렵습니다.
다른 대답은 꽤 좋다.하지만 python3.6에서는 정규 dict도 순서를 가진다. 따라서 일반적인 경우 키 위치를 유지하기가 어렵습니다.
def rename(old_dict,old_name,new_name): new_dict = {} for key,value in zip(old_dict.keys(),old_dict.values()): new_key = key if key != old_name else new_name new_dict[new_key] = old_dict[key] return new_dict
from https://stackoverflow.com/questions/16475384/rename-a-dictionary-key by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] PIL을 사용하여 투명한 png 이미지를 다른 이미지와 병합하는 방법 (0) | 2018.10.02 |
---|---|
[PYTHON] 한 줄 명령 줄에서 파이썬 다중 행 구문 실행하기 (0) | 2018.10.02 |
[PYTHON] __hash __ ()을 구현하는 정확하고 좋은 방법은 무엇입니까? (0) | 2018.10.02 |
[PYTHON] 파이썬에서 matplotlib로 대수 축 플롯 (0) | 2018.10.02 |
[PYTHON] Matplotlib은 틱 레이블 글꼴 크기를 더 작게 만듭니다. (0) | 2018.10.02 |