2014-04-11 6 views
0

다음 코드는 사용하고 있습니다. 목록에 포함 된 값에서 test["test1"]["test2"]["test3"]의 값을 변경할 수 있어야합니다. 이 목록은 길거나 짧을 수 있습니다. 키가 존재하지 않는다면 키를 생성 할 수 있어야합니다.배열의 값을 가진 파이썬 변경 사전 값

test = {"test1": {"test2": {"test3": 1}}} 

print test["test1"]["test2"]["test3"] 
# prints 1 

testParts = ["test1", "test2", "test3"] 

test[testParts] = 2 

print test["test1"]["test2"]["test3"] 
# should print 2 
+0

내 대답은 여기에 적용되는 기술도 있습니다. reduce()를 사용하여 가장 안쪽의 사전으로 이동합니다 (필요에 따라 추가 사전 만들기). –

답변

1

당신이 testParts이 가변 및 unhashable하는 목록이므로 사전 키로 사용할 수 없기 때문에

test[testParts] = 2 

당신이하는 TypeError 얻을 것이다 때. 당신은 키로 튜플 (불변, 해쉬)를 사용할 수 있습니다 :

testParts = ("test1", "test2", "test3") 
test[testParts] = 2 

그러나 이것은 당신에게

test == {('test1', 'test2', 'test3'): 2, 'test1': {'test2': {'test3': 1}}} 

을 줄 것이다 당신이, 즉 무엇을하려고 할 할 내장 방법이 없습니다 중첩 된 사전의 키로 testParts의 "unpack"하십시오. 다음 중 하나를 수행 할 수 있습니다.

test["test1"]["test2"]["test3"] = 2 

또는 직접이 작업을 수행하는 함수를 작성하십시오.

+0

고마워,이게 내 문제를 해결 한 것 같아. 내가 할 수있을 때 나는 정답을 표시 할 것이다. – TechnoCF

+0

Martijn의 연결된 질문에 대한 대답은 "자신이 직접 할 수있는 기능을 작성하는"훌륭한 접근법을 다룹니다. – jonrsharpe