2016-08-11 1 views
0

를 사용하여 DICT합니다.추가 값이 목록은 DICT <code>x</code>에 항목을 추가하는 방법이 목록 <code>lst</code>에 존재하는 키를 사용하여 딕셔너리</p> <pre><code>x = {'a':{'b': 1}} lst = ['a','c'] value = {'d': 3} </code></pre> <p>의 키를 포함하는 시나리오를 생각해보십시오 키 목록

예상 결과 :

x = {'a': {'c': {'d': 3}, 'b': 1}} 
+2

시도한 사항은 무엇입니까? – Harsha

+0

접근법은'x [lst [0]] [lst [1]]을 사용하여 접근 할 수 있습니다. 그러나 lst는 어떤 크기라도 될 수 있기 때문에 여전히 어떻게 달성 할 것인지 생각하고 있습니다. – user3351750

답변

0

사용 루프 임시 dictionary_variable :

tmp_dict = x 
for key in lst[:-1]: 
    tmp_dict = tmp_dict[key] 
tmp_dict[lst[-1]] = value 
print x 

공지 사항, 그 마지막 하나를 제외한 모든 키를 통해 루프, 우리는 마지막으로 키가 필요하기 때문에 할당 작업.

+0

이것은 작동하지만 왜'tmp_dict = x'는 x의 다른 사본을 만들지 않는가? – user3351750

+0

파이썬이 객체를 처리하는 방법입니다. dict 객체에 대한 참조 만 복사합니다. 이 예제를 보자 :'a = [], b = a, b.append (1), print (a)'(','대신에 개행 문자로). 어떤 것을 복사하고 싶다면'copy.deepcopy'와 같은 것을 명시 적으로 사용해야합니다. – user38034

1

필립의 대답은 좋습니다.

하지만 여기에 정확한 답변을 드릴 수 있습니다.

x = {'a':{'b' : 1}} 
lst=['a','c'] 
value = {'d':3} 

x[lst[0]][lst[1]] = value 
print(x) 
>> {'a': {'c': {'d': 3}, 'b': 1}} 
+0

내가 예상하는 대답은 키를 하드 코딩하지 않고 목록의 키 값을 사용하는 것입니다. – user3351750

+0

@ user3351750 위의 코드를 편집했습니다. 나는 lst [0]과 list [1]을 사용했다. 그게 그 대답입니까? – MattR

+0

lst는 크기에 관계없이 작동하지 않을 수 있습니다. – user3351750

관련 문제