3

对于我想组织成一个多维数组然后排序的各种字符串(单词),我有三个数值(权重、计数、贡献)。为此,我在字典中创建了列表,其中数值在列表中,字符串是键:

print_dictionary[word] = [weight,count,contribution]

如何按“贡献”(列表中的第三个值)先按升序然后按降序排序,并显示排序列表的前 10 个项目。我怎样才能做到这一点?

例如,对于以下 print_dictionary:

print_dictionary[sam] = [2,7,1]
print_dictionary[sun] = [4,1,3]
print_dictionary[dog] = [1,3,2]

我希望他们能够按升序对贡献进行排序:

Word:   Weight:   Count:    Contribution:
sam     2         7         1
dog     1         3         2
sun     4         1         3

我看不出如何使用 itemegetter:

sorted(print_dictionary, key=itemgetter(2))
4

2 回答 2

4

您可以将匿名函数作为键传递给sorted. 这使用多维字典的第三个成员作为键:

>>> d = {'a': [1, 4, 7], 'b': [2, 3, 9], 'c': [3, 2, 8]}
>>> for key in sorted(d, key=lambda x: d[x][2]):
...    print key, d[key]
a [1, 4, 7]
c [3, 2, 8]
b [2, 3, 9]

对于降序,使用reverse=True. 要限制结果,请添加[:N]

sorted(d, key=lambda x: d[x][2], reverse=True)[:2]

# b [2, 3, 9]
# c [3, 2, 8]

更多关于sortedPython 和排序的信息。

于 2012-05-27T03:17:31.787 回答
1

您无法真正对字典进行排序。当您尝试时,您实际上只是对字典中的键列表进行排序。您可以使用查看值中的第三项的自定义排序比较来做到这一点。

sorted(print_dictionary, key=lambda word: print_dictionary[word][2])

所以要生成你的报告,这样的事情会起作用:

sorted_keys = sorted(print_dictionary, key=lambda word: print_dictionary[word][2])

print "Word:\tWeight:\tCount:\tContribution"      
for i in range(10): # or however many you want
    word = sorted_keys[i]
    values = print_dictionary[word]
    print "\t".join([word]+[str(n) for n in values])
于 2012-05-27T03:17:22.187 回答