【问题标题】:How to get and use values from a dict of a list of tuples如何从元组列表的字典中获取和使用值
【发布时间】:2014-01-21 18:44:54
【问题描述】:

我有一个元组列表字典:

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

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

【问题讨论】:

  • 你能举一个字符串在列表中不相等的例子吗?

标签: python list dictionary key


【解决方案1】:

首先创建一个临时字典,其中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)]]

【讨论】:

  • 糟糕,我误读了这个问题。你的实现要好得多!
  • 太棒了!我知道了。所以假设我要在 blist 中添加一个随机字符串'x',所以 blist = ['beta', '0', '1', '0', 'x']。我如何从崩溃中捕获它?
  • @user2559679 您可以在列表解析中添加if 条件来处理:[(x, temp_adict[lis[0]][x]) for x in lis[1:] if x in temp_adict[lis[0]]]。如果您想对丢失的键使用虚拟值而不是过滤它们,请使用dict.get
  • 我更愿意为丢失的键使用一个虚拟值而不是过滤。我将如何使用dict.get() 来解决这个问题? dict.get(x) if not in temp_adict[lis[0]]?
【解决方案2】:

这种丑陋的东西一气呵成....当心,它很丑陋!

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 行中完成工作,无论出于何种原因都很重要

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多