2015-09-13 137 views
1

我有一个嵌套的列表,如:蟒蛇:通过按键嵌套列表搜索并存入嵌套表

list1 = [(A,0.75),(D,0.49),(Y,0.36)] 

我有一个参考嵌套列表,如:

mainlist = [(A,10),(B,20),(C,30),(D,40),(E,50).........,(Y,250),(Z,260)] 
  1. 我想在mainlist中搜索关键元素A.
  2. 在主列表中找到A后,将相应的键值对存储在新的嵌套列表中。
  3. 重复1和2 d和Y(列表1中的所有元素)

我想输出:

newlist = [(A,1),(D,4),(Y,250)] 

回答

2

您正在寻找这样的事情:

list1 = [('A',0.75),('D',0.49),('Y',0.36)] 
mainlist = [('A',10),('B',20),('C',30),('D',40),('E',50),('Y',250),('Z',260)] 

keys = {k[0] for k in list1} # create a set with keys from list1 
newlist = [k for k in mainlist if k[0] in keys] # get items from mainlist with good keys 
print(newlist) 
输入:
[('A', 10), ('D', 40), ('Y', 250)] 
+0

这适用于我!谢谢 –

0

请注意,在他的(相当漂亮的)解决方案中使用的set @Sait是独特的项目无序的数据结构:

  • 无序:这意味着你不能安全地假定键的顺序依然会在集合中是'A', 'D', 'Y'
  • unique:这意味着如果您有重复密钥,如'A', 'D', 'Y', 'A',则只会在您的输出中显示'A', 'D', 'Y',因为每个项目只能在一个集合中出现一次。

也就是说,通过使用查找字典而不是元组列表,可以节省一些麻烦。

>>> list1 = [('A',0.75),('D',0.49),('Y',0.36),('D',0.49)] 
>>> maindict = dict({'A':10, 'B':20, 'C':30, 'D':40, 'E':50, 'Y':250, 'Z':260}) 

>>> keys, values = zip(*list1) # unzip the tuples in list one into two separate lists 
>>> newlist = [(key, maindict[key]) for key in keys] 
>>> print(newlist) 
[('A', 10), ('D', 40), ('Y', 250), ('D', 40)] 

该解决方案保证保留您的输入顺序,并且还可以处理重复键。通过使用字典不需要遍历整个mainlist来找到你的密钥。您可以迭代您的密钥,并通过每个密钥的字典查询(这是相当快的)来获取它们的值。