사전에서 키 이름 변경


답변:


715

2 단계로 쉽게 수행 할 수 있습니다.

dictionary[new_key] = dictionary[old_key]
del dictionary[old_key]

또는 1 단계에서 :

dictionary[new_key] = dictionary.pop(old_key)

이는 올릴 KeyError경우 dictionary[old_key]정의되지 않는다. 이 참고 합니다 삭제합니다 dictionary[old_key].

>>> dictionary = { 1: 'one', 2:'two', 3:'three' }
>>> dictionary['ONE'] = dictionary.pop(1)
>>> dictionary
{2: 'two', 3: 'three', 'ONE': 'one'}
>>> dictionary['ONE'] = dictionary.pop(1)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 1

59
키가 존재하지 않으면 KeyError가 발생하지만이 dict[new_value] = dict.pop(old_value, some_default_value)를 피하기 위해 사용할 수 있습니다.
Tobias Kienzler

2
이는 CPython 3.6+ / Pypy 및 Python 3.7+의 키 위치에도 영향을 미칩니다. 즉, 일반적으로의 위치는의 위치와 old_key다릅니다 new_key.
norok2

63

모든 키를 변경하려면 다음을 수행하십시오.

d = {'x':1, 'y':2, 'z':3}
d1 = {'x':'a', 'y':'b', 'z':'c'}

In [10]: dict((d1[key], value) for (key, value) in d.items())
Out[10]: {'a': 1, 'b': 2, 'c': 3}

단일 키를 변경하려는 경우 위의 제안 중 하나를 수행 할 수 있습니다.


3
이렇게하면 기존 사전을 업데이트하는 대신 새 사전이 만들어집니다. 중요하지는 않지만 요청한 내용이 아닙니다.
martineau

15
사전 이해와 같은 대답 :{ d1[key] : value for key, value in d.items() }
Morwenn

35

pop'n'fresh

>>>a = {1:2, 3:4}
>>>a[5] = a.pop(1)
>>>a
{3: 4, 5: 2}
>>> 

26

파이썬 2.7 이상에서는 사전 이해를 사용할 수 있습니다. 이것은 DictReader를 사용하여 CSV를 읽는 동안 발생한 예제입니다. 사용자는 모든 열 이름에 ':'을 붙였습니다.

ori_dict = {'key1:' : 1, 'key2:' : 2, 'key3:' : 3}

키에서 후행 ':'을 제거하려면 다음을 수행하십시오.

corrected_dict = { k.replace(':', ''): v for k, v in ori_dict.items() }


"AttributeError : 'dict'객체에 'replace'속성이 없습니다"
user1318135

2
user1318125, 복사 붙여 넣기를 시도하는 것이 좋습니다. 이것은 파이썬 콘솔에서 나를 위해 작동합니다 (
.replace

7

키는 사전이 값을 조회하는 데 사용하는 것이므로 실제로 변경할 수는 없습니다. 가장 가까운 작업은 이전 키와 관련된 값을 저장하고 삭제 한 다음 대체 키와 저장된 값으로 새 항목을 추가하는 것입니다. 다른 답변들 중 몇 가지는 이것이 달성 될 수있는 다른 방법들을 보여줍니다.


5

복잡한 dict이 있으면 dict 내에 dict 또는 list가 있음을 의미합니다.

myDict = {1:"one",2:{3:"three",4:"four"}}
myDict[2][5] = myDict[2].pop(4)
print myDict

Output
{1: 'one', 2: {3: 'three', 5: 'four'}}

4

이를 수행하는 직접적인 방법은 없지만 delete-then-assign 할 수 있습니다

d = {1:2,3:4}

d[newKey] = d[1]
del d[1]

또는 대량 키 변경을 수행하십시오.

d = dict((changeKey(k), v) for k, v in d.items())

2
d = { changeKey(k): v for k, v in d.items()}
Erich

4

사전의 모든 키를 변환하려면

이것이 사전이라고 가정하십시오.

>>> sample = {'person-id': '3', 'person-name': 'Bob'}

샘플 사전 키에서 모든 대시를 밑줄로 변환하려면 다음을 수행하십시오.

>>> sample = {key.replace('-', '_'): sample.pop(key) for key in sample.keys()}
>>> sample
>>> {'person_id': '3', 'person_name': 'Bob'}

3
d = {1:2,3:4}

키를 목록 요소 p = [ 'a', 'b']로 변경한다고 가정합니다. 다음 코드가 수행됩니다.

d=dict(zip(p,list(d.values()))) 

그리고 우리는 얻는다

{'a': 2, 'b': 4}

0

동일한 값을 여러 키와 연결하거나 키를 제거하고 동일한 값을 가진 새 키를 다시 추가 할 수 있습니다.

예를 들어, 키-> 값이있는 경우 :

red->1
blue->2
green->4

추가 purple->2하거나 제거 red->1하고 추가 할 수없는 이유가 없습니다orange->1


0

모든 키를 한 번에 변경하는 경우 여기서 나는 열쇠를 형태소 분석하고있다.

a = {'making' : 1, 'jumping' : 2, 'climbing' : 1, 'running' : 2}
b = {ps.stem(w) : a[w] for w in a.keys()}
print(b)
>>> {'climb': 1, 'jump': 2, 'make': 1, 'run': 2} #output

-3

이 정확한 답변을 보지 못했습니다.

dict['key'] = value

속성을 객체화하기 위해이 작업을 수행 할 수도 있습니다. 다음을 수행하여 사전으로 만드십시오.

dict = vars(obj)

그런 다음 사전처럼 객체 속성을 조작 할 수 있습니다.

dict['attribute'] = value

1
나는 이것이 질문과 어떻게 관련되어 있는지 알지 못한다. 자세히 설명해 주시겠습니까?
apraetor
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.