簡體   English   中英

Python復雜字典排序

[英]Python complicated dictionary sorting

我有一本字典,其中的每個鍵都包含一個列表作為值。 每個列表都有一個或多個元組,里面有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]

我究竟做錯了什么? 我如何才能根據需要對這本詞典進行排序?

謝謝。

如果您不介意將字典中的列表排序,我建議分兩步進行:

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))

使用max

for k in sorted(data, key=lambda k: max(data[k]), reverse=True):

以下代碼段將為您提供新的排序字典:

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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM