사전

2014-02-24 5 views
2

의 목록에서 중첩 된 사전을 만드는 나는 울부 짖는 소리와 같은 사전 (구문 분석 lspci를 정보)가사전

원래 사전 :

d={'host':{'v':'v1','d':'d1','sv':'sv1','sd':'sd1'}, 
    'ether':{'v':'v2','d':'d2','sv':'sv2','sd':'sd2'}} 

사전은 원래 사전에 확인하기 :

to_check={'host':['v','d'],'ether':['v','d','sv']} 

전 이런 출력이 필요합니다.

output_dict={'host':{'v':'v1','d':'d1'},'ether':{'v':'v2','d':'d2','sv':'sv2'}} 

어떻게 독해력을 사용하여 달성합니까 ?? 다른 쉬운 방법을이

+0

또 다른 쉬운 방법은 무엇입니까? – aIKid

답변

5
print {k:{key:d[k][key] for key in to_check[k] if key in d[k]} for k in to_check} 

출력

{'ether': {'d': 'd2', 'v': 'v2', 'sv': 'sv2'}, 'host': {'d': 'd1', 'v': 'v1'}} 
+0

하하. 하하. 빨리, 젠장. +1. – aIKid

+0

귀하의 이해가 차트에서 벗어났습니다. P –

+0

@thefourtheye thnx .... :) – user2404093

1
>>> {k:{v:d[k][v] for v in vs} for k,vs in to_check.items()} 
{'ether': {'d': 'd2', 'sv': 'sv2', 'v': 'v2'}, 'host': {'d': 'd1', 'v': 'v1'}} 
1
>>> {key: {l: d.get(key).get(l) for l in lst} for key, lst in to_check.items()} 
{'host': {'d': 'd1', 'v': 'v1'}, 'ether': {'sv': 'sv2', 'd': 'd2', 'v': 'v2'}} 

[] 반대로이 예제의 경우를 들어, 당신에게 더 많은 유연성을 제공하기 때문에 get을 사용하는 것이 안전합니다 키 x이 없습니다 (방금 to_check에 추가했습니다), 다른 것을 설정할 수 있습니다 값을 get로 지정하면 기본값 :

>>> {key: {l: d.get(key, 'Does Not Exist').get(l, 'Does Not exit') for l in lst} for key, lst in to_check.items()} 
{'host': {'x': 'Does Not exit', 'd': 'd1', 'v': 'v1'}, 'ether': {'sv': 'sv2', 'd': 'd2', 'v': 'v2'}}