如何获取和使用元组列表的dict中的值

时间:2014-01-21 18:44:54

标签: python list dictionary key

我有一个元组列表的字典:

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)] ] 

它是一种多级搜索。我该如何处理?

2 个答案:

答案 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)]]

答案 1 :(得分: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]]

它也不是很干,只是在一行中完成工作,如果这无关紧要