2014-02-24 20 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

您的理解fu不在圖表中: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'}}