2014-01-13 148 views
1

嗨,我在大学的一个项目中,我想获得从网站获得的前n个评分要素。在Python中合并两个列表

我设法得到与美丽的元素的评分和标题。 现在我有两个名单:一个与标题和一个评级。 他们看起来像这样: 评级

[4.4, 3.5, 5.0 , 1.5] 

标题

['Title1','Title2','Title3','Title4'] 

的排名顺序是内嵌的标题顺序。 我该如何合并这两个列表才能获得前n个评分要素?

回答

3
lst1 = [4.4, 3.5, 5.0 , 1.5] 
lst2 = ['Title1','Title2','Title3','Title4'] 
zipped = list(zip(lst1, lst2)) # "merges" the lists 
zipped.sort(key=lambda x: x[0], reverse=True) # sorts by ratings, descending 
print(zipped) 

输出:

[(5.0, 'Title3'), (4.4, 'Title1'), (3.5, 'Title2'), (1.5, 'Title4')] 

现在,你可以切片输出(zipped)你的心脏的内容,以获得您想要的顶级然而,很多头衔。如果,例如,你想上2个元素(但只有标题,没有收视率):

n = 2 
result = [item[1] for item in zipped[:n]] 
print(result) 

输出:

['Title3', 'Title1'] 
0
>>> ratings = [4.4, 3.5, 5.0 , 1.5] 
>>> titles = ['Title1','Title2','Title3','Title4'] 
>>> sorted(list(enumerate(titles)), key=lambda t:ratings[t[0]]) 
[(3, 'Title4'), (1, 'Title2'), (0, 'Title1'), (2, 'Title3')] 
>>> [t[1] for t in sorted(list(enumerate(titles)), key=lambda t:ratings[t[0]])] 
['Title4', 'Title2', 'Title1', 'Title3'] 
+0

+1正确回答OP的问题,虽然我认为'zip'和一个列表comp来获得标题可能会更清楚一点! –

+0

@adsmith:我同意。我看到了'zip'解决方案,并发布了这个解决方案,只是为了提供另一种解决方法 – inspectorG4dget

0

如果你知道他们总是相同的长度你可以做这样的事情:

for i in range(0,len(numberList)): 
    newList.append(titleList[i],numberList[i]) 

然后会给你一个新的列表是这样的:

[('Title1',4.4),('Title2',3.5)] 

那你可以随心所欲地分类和使用。

+0

这里最好使用列表理解。 – kevinsa5

1
>>> import heapq 
>>> A = [4.4, 3.5, 5.0 , 1.5] 
>>> B = ['Title1','Title2','Title3','Title4'] 
>>> heapq.nlargest(2, zip(A, B)) 
[(5.0, 'Title3'), (4.4, 'Title1')]