2014-11-03 2 views
1

에서 키를 사전에 사전에서부터 다음과 같이해야합니다.이동 나는 긴 값의 라인과 사전 트리가 목록

print(dict["a"]["b"]["c"]) 

그러나 목록을 사용하여 사전을 탐색 할 수 있기를 원합니다. 이론적으로, 이것은 어떻게 작동하는지입니다 : "안녕하세요"를

dict = {"a":{"b":{"c":"Hello World!"}}} 
list = ["a", "b", "c"] 
print(dict[list]) 

을 그리고 파이썬 인쇄 것이다, 그러나이 어떻게 작동 될 것 같지 않습니다. 어떤 아이디어라도 큰 도움이 될 것입니다!

+2

기본적으로 그렇게 할 수 없습니다. 각 레벨에 각 키를 적용하는 고유 한 기능을 만들어야합니다. – jonrsharpe

+0

그래서 항상 가치가 마지막에 ??? – Hackaholic

+0

@jonrsharpe : 쓸 기능이별로 없습니다 (제 대답을보십시오). – BrenBarn

답변

6

reduce (파이썬 3에서는 from functools import reduce으로 가져올 필요가 있습니다)을 사용할 수 있습니다. 이처럼

reduce(lambda a, b: a[b], key_list, my_dict) 

:

my_dict = {"a":{"b":{"c":"Hello World!"}}} 
key_list = ["a", "b", "c"] 

>>> reduce(lambda a, b: a[b], key_list, my_dict) 
'Hello World!' 
키의이 존재하지 않는 경우는 예외가 발생합니다

(또는 많은이되지 않도록 사전 중첩도 "얕은"인 경우 키로 쓴다).

변수의 이름을 변경했습니다. listdict을 변수 이름으로 사용하는 것은 좋지 않습니다. 왜냐하면 변수 이름이 내장 된 유형에 그림자가 생기기 때문입니다.

+2

OP가 이것을 3.x라고 표시 했으므로'from functools import reduce'가 필요합니다 –

+0

사전을 편집하는데도 이것을 사용할 수 있습니까? 예를 들어 (이상적인 세계에서, dict [list] .update (new_dict)) – Inazuma

+1

@ Inazuma : 마지막 키를 제거하면 얻을 수있는 내용이 내부 dict에 대한 참조가됩니다. 'key_list = [ 'a', 'b']'하면'reduce'의 결과가 당신이 업데이트 할 수있는 내부 dict가 될 것입니다. – BrenBarn