【发布时间】:2016-03-14 12:53:49
【问题描述】:
我正在尝试根据通用标准对字典列表进行排名。所以我的列表看起来像这样:
d = [{'key1': 0, 'key2': 1}, {'key1': 1, 'key2': 0}]
我想根据我可能指定的标准获得每个字典的排名(以相反的顺序)。所以,如果条件是'key1',输出应该是:
1 0
如果条件是'key2',那么输出应该是:
0 1
我尝试了以下功能:
def rank_simple(list, criteria):
return sorted(range(len(list)), reverse = True, key = type(list).__getitem__(list)[criteria])
给出错误:
TypeError: __getitem__() takes exactly one argument (0 given)
和
def rank_simple(list, criteria):
return sorted(range(len(list)), reverse = True, key = list.__getitem__[criteria])
给出错误:
TypeError: 'builtin_function_or_method' object has no attribute '__getitem__'
根据Efficient method to calculate the rank vector of a list in Python中的建议
我应该如何解决这个问题。请注意,我不想为此使用 scipy 或 numpy(如果可能)
【问题讨论】:
-
我不明白
1和2的值来自哪里 -
使用
key=lambda x: x[criteria]。此外,在sorted()中,使用range(1, len(mylist) + 1)。怎么样,你会得到[0, 1]和[1, 0],而不是[1, 2]和[2, 1]。 不要使用list作为变量名,因为它与内置类型冲突。 -
@gtlambert:他正在使用基于 1 的索引。
-
@ScottHunter 修改了问题。希望现在更清楚:)
-
@akhiljain:非常清楚,只是错了。
标签: python list dictionary rank