给出一个视频名称列表L和他们的观看费率,写一个功能,将返回前10个观看率的视频

时间:2018-05-18 16:08:01

标签: python python-3.x

视频名称可能会出现多次。 例: L = [('abc',10),('def',15),('ghi',10),('abc',12),...,('xyz',100)] 该函数应返回['xyz','abc',...,'def','ghi']

这是我到目前为止所做的事情(无论我尝试什么都行不通,似乎无法修复):

def ranked_games(L):
    sorted_list = [x for x in L.items()]
    sorted_list.sort(key = lambda x:x[1]) #sort by value
    sorted_list.reverse()
    print("Sorted by Value Descending",sorted_list) 

如果您有更好的方法来解决这个问题,或者您知道我的代码出了什么问题,我将不胜感激。请提前感谢您。

5 个答案:

答案 0 :(得分:1)

这会完成您的目标吗?

QTcpSocket

答案 1 :(得分:1)

这是你要找的吗?

L = [('abc',10),('def',15),('ghi',10),('abc', 12),('xyz',100)]

def ranked_games(L):
    sorted_list = sorted(L,key = lambda x:x[1],reverse=True) #sort by value
    print("Sorted by Value Descending",[i[0] for i in sorted_list]) 

ranked_games(L)

答案 2 :(得分:1)

要修复上述代码,您只需尝试以下操作:

def ranked_games(L):
    L.sort(key = lambda x:x[1], reverse=True) #sort by value
    print("Sorted by Value Descending", [i for i, _ in L[:10]]) # [:10] for slicing 10 sorted values

# calling the function
my_list = [('abc',10),('def',15),('ghi',10),('abc', 12),('xyz',100)]
ranked_games(my_list)
print('Original List: ', my_list)

结果:

Sorted by Value Descending ['xyz', 'def', 'abc', 'abc', 'ghi']
Original List:  [('xyz', 100), ('def', 15), ('abc', 12), ('abc', 10), ('ghi', 10)]

请注意,原始列表也会在调用list .sort方法后进行排序。如果您不希望对原始列表进行排序,那么您可能需要调用sorted函数并将列表作为参数传递,如下所示:

def ranked_games(L):
    sorted_list = sorted(L, key = lambda x:x[1], reverse=True) #sort by value
    print("Sorted by Value Descending",[i for i, _ in sorted_list[:10]]) # [:10] for slicing 10 sorted values

# calling the function
my_list = [('abc',10),('def',15),('ghi',10),('abc', 12),('xyz',100)]
ranked_games(my_list)
print('Original List: ', my_list)

结果:

Sorted by Value Descending ['xyz', 'def', 'abc', 'abc', 'ghi']
Original List:  [('abc', 10), ('def', 15), ('ghi', 10), ('abc', 12), ('xyz', 100)]

有关sortsorted之间差异的更多信息,请查看相关问题What is the difference between sorted(list) vs list.sort()?

答案 3 :(得分:1)

我认为您缺少合并部分。必须先将'abc'组合起来,然后才能进行排序,否则,您实际上并不是在对正确的列表进行排序:

l = [('abc', 10), ('def', 15), ('ghi', 10), ('abc', 12), ('xyz', 100)]
diction = {}
for (i, j) in l:
    if i in diction:
        diction[i] = diction[i] + j
    else:
        diction[i] = j
sorted_list = list(diction.items())
sorted_list = sorted(sorted_list, key=lambda x: x[1], reverse=True)

print(sorted_list[:10])

答案 4 :(得分:0)

l=[('abc',10),('def',15),('ghi',10),('abc', 12),('xyz',100)]

sortedlist = sorted(l,key = lambda x:x[1],reverse=True)
d=dict(sortedlist)

print(list(d.keys()))