2015-09-13 180 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來找到你的密鑰。您可以迭代您的密鑰,並通過每個密鑰的字典查詢(這是相當快的)來獲取它們的值。