2014-01-21 64 views
0

我有一個元組列表的字典:如何獲取並使用值從一個元組列表的字典

adict = {'alpha': [('0', 'beta'), ('1', 'beta')], 
     'beta': [('0', 'alpha'), ('1', 'alpha')]} 

和值的列表:

alist = ['alpha', '0', '1', '0'] 
blist = ['beta', '0', '1', '0', 'x'] 

我想能夠使用第一個索引作爲關鍵字來搜索字典,然後使用列表中的數字來搜索元組,並將匹配的元組(帶有元組的第一個元素)與該值一起追加到最終列表中。我不知道如果我是不夠清楚,但在最後,我想最終名單要

final_list = [ ['alpha', ('0', 'beta'), ('1', 'beta'), ('0', 'beta')], 
       ['beta', ('0', 'alpha'), ('1', 'alpha'), ('0', 'alpha'), ('x': None)] ] 

其種類多級搜索的。我會如何處理這個問題?

+0

你能使用其中的字符串不是通過列表平等權利的例子嗎? –

回答

2

先創建一個臨時字典,其中adict的值是字典本身。然後使用列表理解來獲得所需的列表。

>>> temp_adict = {k:dict(v) for k, v in adict.items()} 
>>> [ lis[:1] + [(x, temp_adict[lis[0]].get(x)) for x in lis[1:]] 
                 for lis in [alist, blist]] 
[['alpha', ('0', 'beta'), ('1', 'beta'), ('0', 'beta')], 
['beta', ('0', 'alpha'), ('1', 'alpha'), ('0', 'alpha'), ('x', None)]] 
+0

哎呀,我誤解了這個問題。你的實現更好! –

+0

燦爛!我知道了。因此,我們可以說,如果我將一個隨機字符串'x'添加到blist中,blist = ['beta','0','1','0','x']。我如何從崩潰中捕捉它? – user2559679

+0

@ user2559679你可以在列表理解中添加一個'if'條件來處理:[(x,temp_adict [lis [0]] [x])如果x在temp_adict中, 0]]]'。如果您想爲丟失的鍵使用虛擬值而不是過濾它們,請使用'dict.get'。 –

0

這個醜陋行爲在一行....要小心,這是醜陋的!

solution = [[alist[0]] + [(key, adict[alist[0]][index][1]) for key in alist[1:] for index in xrange(len(adict[alist[0]])) if adict[alist[0]][index][0] == key]] + [[blist[0]] + [(key, adict[blist[0]][index][1]) for key in blist[1:] for index in xrange(len(adict[alist[0]])) if adict[alist[0]][index][0] == key]] 

它也不會很乾,只是沒有在1號線的工作,如果該事項無論出於何種原因

相關問題