2

我有一本字典,其中每个键都保存一个列表作为值。每个列表都有一个或多个元组,里面有 2 个项目,一个整数,一个字符串。

例子:

my_dict = {'dict_key_1': [(100, 'string_x1234'), (95, 'string_rtx3') ..],
           'dict_key_2': [(26, 'string_abc3'), (321, 'string_432fd'), ...],
           'dict_key_3': [(32, 'string_232df']}

我正在遍历这本字典,同时通过列表中的项目进行操作。

但是,在两次迭代中,我必须让字典按列表中任何元组的第一项的最大值排序。

所以在那种情况下,由于321是最高的,我会首先得到dict_key_2,它的项目将从第一个项目的元组开始列出321,然后是26等等。

我对第二次迭代(对元组列表进行排序)很好:

sorted(data[k], reverse = True)

但是我目前无法根据字典键所持有的列表中任何元组的最大值对主字典进行排序。我目前有:

for k in sorted(data, key=lambda k: sorted(data[k])[0][0]):

但是,它不起作用。但是当我在迭代时尝试打印sorted(data[k])[0][0])时,它确实给出了第一个元组 [0] 的第一个值 [0],在它对该列表中所有元组的第一个值进行排序之后(data[k]

我究竟做错了什么?如何根据需要对这本字典进行排序?

谢谢你。

4

3 回答 3

2

如果您不介意对 dict 中的列表进行排序,我建议您分两次执行此操作:

for L in my_dict.itervalues():
  L.sort(reverse=True)

import collections
my_sorted_dict = collections.OrderedDict((k, my_dict[k]) for k in sorted(my_dict, key=my_dict.get, reverse=True))
于 2012-10-22T01:32:43.400 回答
1

以下代码段将为您提供一个新的排序字典:

from collections import OrderedDict

my_dict = {'dict_key_1': [(100, 'string_x1234'), (95, 'string_rtx3')],
           'dict_key_2': [(26, 'string_abc3'), (321, 'string_432fd')],
           'dict_key_3': [(32, 'string_232df')]}

sorted_my_dict = OrderedDict(sorted(my_dict.iteritems(),
                                    key=lambda (k, v): max(v),
                                    reverse=True))
于 2012-10-22T01:46:56.750 回答
1

使用max

for k in sorted(data, key=lambda k: max(data[k]), reverse=True):
于 2012-10-22T01:27:32.937 回答