我有一个元组列表的字典:
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)]]
答案 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]]
它也不是很干,只是在一行中完成工作,如果这无关紧要