2017-10-15 71 views
0

我正在尋找一種方法來排序詞典的字典,通過包含最多值的字典。 這是原來的字典:
Python排序詞典的大多數值

test = {u'Beta': { 
     u'SW Engineering': { 
       u'Resolved': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 3, u'2017-10-11 00:19:29': 2, u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 3, u'2017-10-12 00:19:52': 3, u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 2, u'2017-10-13 00:19:28': 3, u'2017-10-07 09:54:33': 1}, 
       u'In Progress': {u'2017-10-06 08:04:15': 9, u'2017-10-15 00:19:35': 12, u'2017-10-11 00:19:29': 11, u'2017-10-09 00:19:00': 9, u'2017-10-14 00:21:09': 12, u'2017-10-12 00:19:52': 11, u'2017-10-08 00:18:58': 9, u'2017-10-10 00:19:31': 10, u'2017-10-13 00:19:28': 11, u'2017-10-07 09:54:33': 9}, 
       u'In Testing': {u'2017-10-06 08:04:15': 7, u'2017-10-15 00:19:35': 7, u'2017-10-11 00:19:29': 7, u'2017-10-09 00:19:00': 7, u'2017-10-14 00:21:09': 7, u'2017-10-12 00:19:52': 7, u'2017-10-08 00:18:58': 7, u'2017-10-10 00:19:31': 7, u'2017-10-13 00:19:28': 7, u'2017-10-07 09:54:33': 7}, 
       u'Reopened': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 1, u'2017-10-11 00:19:29': 1, u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 1, u'2017-10-12 00:19:52': 1, u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 1, u'2017-10-13 00:19:28': 1, u'2017-10-07 09:54:33': 1}, 
       u'Closed': {u'2017-10-06 08:04:15': 17, u'2017-10-15 00:19:35': 18, u'2017-10-11 00:19:29': 18, u'2017-10-09 00:19:00': 17, u'2017-10-14 00:21:09': 18, u'2017-10-12 00:19:52': 18, u'2017-10-08 00:18:58': 17, u'2017-10-10 00:19:31': 18, u'2017-10-13 00:19:28': 18, u'2017-10-07 09:54:33': 17}, 
       u'Open': {u'2017-10-06 08:04:15': 5, u'2017-10-15 00:19:35': 8, u'2017-10-11 00:19:29': 8, u'2017-10-09 00:19:00': 5, u'2017-10-14 00:21:09': 8, u'2017-10-12 00:19:52': 7, u'2017-10-08 00:18:58': 5, u'2017-10-10 00:19:31': 8, u'2017-10-13 00:19:28': 8, u'2017-10-07 09:54:33': 5}}, 
     u'DSP Engineering': { 
       u'In Progress': {u'2017-10-15 00:19:35': 1, u'2017-10-14 00:21:09': 1}}}} 


這是我多麼希望它看起來像:

test = {u'Beta': { 
     u'DSP Engineering': { 
       u'In Progress': {u'2017-10-15 00:19:35': 1, u'2017-10-14 00:21:09': 1}}, 
     u'SW Engineering': { 
       u'Resolved': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 3, u'2017-10-11 00:19:29': 2, u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 3, u'2017-10-12 00:19:52': 3, u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 2, u'2017-10-13 00:19:28': 3, u'2017-10-07 09:54:33': 1}, 
       u'In Progress': {u'2017-10-06 08:04:15': 9, u'2017-10-15 00:19:35': 12, u'2017-10-11 00:19:29': 11, u'2017-10-09 00:19:00': 9, u'2017-10-14 00:21:09': 12, u'2017-10-12 00:19:52': 11, u'2017-10-08 00:18:58': 9, u'2017-10-10 00:19:31': 10, u'2017-10-13 00:19:28': 11, u'2017-10-07 09:54:33': 9}, 
       u'In Testing': {u'2017-10-06 08:04:15': 7, u'2017-10-15 00:19:35': 7, u'2017-10-11 00:19:29': 7, u'2017-10-09 00:19:00': 7, u'2017-10-14 00:21:09': 7, u'2017-10-12 00:19:52': 7, u'2017-10-08 00:18:58': 7, u'2017-10-10 00:19:31': 7, u'2017-10-13 00:19:28': 7, u'2017-10-07 09:54:33': 7}, 
       u'Reopened': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 1, u'2017-10-11 00:19:29': 1, u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 1, u'2017-10-12 00:19:52': 1, u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 1, u'2017-10-13 00:19:28': 1, u'2017-10-07 09:54:33': 1}, 
       u'Closed': {u'2017-10-06 08:04:15': 17, u'2017-10-15 00:19:35': 18, u'2017-10-11 00:19:29': 18, u'2017-10-09 00:19:00': 17, u'2017-10-14 00:21:09': 18, u'2017-10-12 00:19:52': 18, u'2017-10-08 00:18:58': 17, u'2017-10-10 00:19:31': 18, u'2017-10-13 00:19:28': 18, u'2017-10-07 09:54:33': 17}, 
       u'Open': {u'2017-10-06 08:04:15': 5, u'2017-10-15 00:19:35': 8, u'2017-10-11 00:19:29': 8, u'2017-10-09 00:19:00': 5, u'2017-10-14 00:21:09': 8, u'2017-10-12 00:19:52': 7, u'2017-10-08 00:18:58': 5, u'2017-10-10 00:19:31': 8, u'2017-10-13 00:19:28': 8, u'2017-10-07 09:54:33': 5}}}} 
+1

Python3.6最大元素字典增加了一個項目?如果沒有,你不能排序字典。 –

+3

從排序列表中創建一個OrderedDict。 – Ryan

+0

@cᴏʟᴅsᴘᴇᴇᴅ可能不會,那些U字符串。 –

回答

1

一個例子如何與OrderedDict做到這一點。

from collections import OrderedDict 
import json 


test = {u'Beta': { 
     u'SW Engineering': { 
       u'Resolved': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 3, u'2017-10-11 00:19:29': 2, u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 3, u'2017-10-12 00:19:52': 3, u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 2, u'2017-10-13 00:19:28': 3, u'2017-10-07 09:54:33': 1}, 
       u'In Progress': {u'2017-10-06 08:04:15': 9, u'2017-10-15 00:19:35': 12, u'2017-10-11 00:19:29': 11, u'2017-10-09 00:19:00': 9, u'2017-10-14 00:21:09': 12, u'2017-10-12 00:19:52': 11, u'2017-10-08 00:18:58': 9, u'2017-10-10 00:19:31': 10, u'2017-10-13 00:19:28': 11, u'2017-10-07 09:54:33': 9}, 
       u'In Testing': {u'2017-10-06 08:04:15': 7, u'2017-10-15 00:19:35': 7, u'2017-10-11 00:19:29': 7, u'2017-10-09 00:19:00': 7, u'2017-10-14 00:21:09': 7, u'2017-10-12 00:19:52': 7, u'2017-10-08 00:18:58': 7, u'2017-10-10 00:19:31': 7, u'2017-10-13 00:19:28': 7, u'2017-10-07 09:54:33': 7}, 
       u'Reopened': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 1, u'2017-10-11 00:19:29': 1, u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 1, u'2017-10-12 00:19:52': 1, u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 1, u'2017-10-13 00:19:28': 1, u'2017-10-07 09:54:33': 1}, 
       u'Closed': {u'2017-10-06 08:04:15': 17, u'2017-10-15 00:19:35': 18, u'2017-10-11 00:19:29': 18, u'2017-10-09 00:19:00': 17, u'2017-10-14 00:21:09': 18, u'2017-10-12 00:19:52': 18, u'2017-10-08 00:18:58': 17, u'2017-10-10 00:19:31': 18, u'2017-10-13 00:19:28': 18, u'2017-10-07 09:54:33': 17}, 
       u'Open': {u'2017-10-06 08:04:15': 5, u'2017-10-15 00:19:35': 8, u'2017-10-11 00:19:29': 8, u'2017-10-09 00:19:00': 5, u'2017-10-14 00:21:09': 8, u'2017-10-12 00:19:52': 7, u'2017-10-08 00:18:58': 5, u'2017-10-10 00:19:31': 8, u'2017-10-13 00:19:28': 8, u'2017-10-07 09:54:33': 5}}, 
     u'DSP Engineering': { 
       u'In Progress': {u'2017-10-15 00:19:35': 1, u'2017-10-14 00:21:09': 1}}}} 


engineers_tasks = [] 
for engineer, tasks in test['Beta'].items(): 
    tasks_sorted = sorted(tasks.items(), key=lambda k: len(k[1]), reverse=True) 
    min_tasks = len(tasks_sorted[-1][1]) 
    engineers_tasks.append((engineer, OrderedDict(tasks_sorted), min_tasks)) 

engineers_tasks = sorted(engineers_tasks, key=lambda k: k[-1]) 
engineers_tasks = OrderedDict([tasks[:-1] for tasks in engineers_tasks]) 

test_sorted = {'Beta': engineers_tasks} 
print json.dumps(test_sorted, indent=2) 
+0

@你的解決方案不像OP問的那樣工作,請嘗試使用一些測試用例,它不能按最大元素排序。 –

+0

'不按元素的最大數量排序?它產生了所需的結果。 – dm295

+0

試一下這個測試用例:https://dpaste.de/Zfz9 –

-1

這不是最好的解決方案,但你可以試試。 出於測試目的,我在其中有一個名爲「SW Engineering33」

from collections import OrderedDict 

test = {u'Beta': { 
     u'SW Engineering': { 
       u'Resolved': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 3, u'2017-10-11 00:19:29': 2, u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 3, u'2017-10-12 00:19:52': 3, u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 2, u'2017-10-13 00:19:28': 3, u'2017-10-07 09:54:33': 1}, 
       u'In Progress': {u'2017-10-06 08:04:15': 9, u'2017-10-15 00:19:35': 12, u'2017-10-11 00:19:29': 11, u'2017-10-09 00:19:00': 9, u'2017-10-14 00:21:09': 12, u'2017-10-12 00:19:52': 11, u'2017-10-08 00:18:58': 9, u'2017-10-10 00:19:31': 10, u'2017-10-13 00:19:28': 11, u'2017-10-07 09:54:33': 9}, 
       u'In Testing': {u'2017-10-06 08:04:15': 7, u'2017-10-15 00:19:35': 7, u'2017-10-11 00:19:29': 7, u'2017-10-09 00:19:00': 7, u'2017-10-14 00:21:09': 7, u'2017-10-12 00:19:52': 7, u'2017-10-08 00:18:58': 7, u'2017-10-10 00:19:31': 7, u'2017-10-13 00:19:28': 7, u'2017-10-07 09:54:33': 7}, 
       u'Reopened': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 1, u'2017-10-11 00:19:29': 1, u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 1, u'2017-10-12 00:19:52': 1, u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 1, u'2017-10-13 00:19:28': 1, u'2017-10-07 09:54:33': 1}, 
       u'Closed': {u'2017-10-06 08:04:15': 17, u'2017-10-15 00:19:35': 18, u'2017-10-11 00:19:29': 18, u'2017-10-09 00:19:00': 17, u'2017-10-14 00:21:09': 18, u'2017-10-12 00:19:52': 18, u'2017-10-08 00:18:58': 17, u'2017-10-10 00:19:31': 18, u'2017-10-13 00:19:28': 18, u'2017-10-07 09:54:33': 17}, 
       u'Open': {u'2017-10-06 08:04:15': 5, u'2017-10-15 00:19:35': 8, u'2017-10-11 00:19:29': 8, u'2017-10-09 00:19:00': 5, u'2017-10-14 00:21:09': 8, u'2017-10-12 00:19:52': 7, u'2017-10-08 00:18:58': 5, u'2017-10-10 00:19:31': 8, u'2017-10-13 00:19:28': 8, u'2017-10-07 09:54:33': 5}}, 

    u'SW Engineering33': { 
     u'Resolved': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 3, u'2017-10-11 00:19:29': 2, 
         u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 3, u'2017-10-12 00:19:52': 3, 
         u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 2, u'2017-10-13 00:19:28': 3, 
         u'2017-10-07 09:54:33': 1}, 

     u'Resolved43': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 3, u'2017-10-11 00:19:29': 2, 
         u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 3, u'2017-10-12 00:19:52': 3, 
         u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 2, u'2017-10-13 00:19:28': 3, 
         u'2017-10-07 09:54:33': 1}, 
     u'In Progress': {u'2017-10-06 08:04:15': 9, u'2017-10-15 00:19:35': 12, u'2017-10-11 00:19:29': 11, 
         u'2017-10-09 00:19:00': 9, u'2017-10-14 00:21:09': 12, u'2017-10-12 00:19:52': 11, 
         u'2017-10-08 00:18:58': 9, u'2017-10-10 00:19:31': 10, u'2017-10-13 00:19:28': 11, 
         u'2017-10-07 09:54:33': 9}, 
     u'In Testing': {u'2017-10-06 08:04:15': 7, u'2017-10-15 00:19:35': 7, u'2017-10-11 00:19:29': 7, 
         u'2017-10-09 00:19:00': 7, u'2017-10-14 00:21:09': 7, u'2017-10-12 00:19:52': 7, 
         u'2017-10-08 00:18:58': 7, u'2017-10-10 00:19:31': 7, u'2017-10-13 00:19:28': 7, 
         u'2017-10-07 09:54:33': 7}, 
     u'Reopened': {u'2017-10-06 08:04:15': 1, u'2017-10-15 00:19:35': 1, u'2017-10-11 00:19:29': 1, 
         u'2017-10-09 00:19:00': 1, u'2017-10-14 00:21:09': 1, u'2017-10-12 00:19:52': 1, 
         u'2017-10-08 00:18:58': 1, u'2017-10-10 00:19:31': 1, u'2017-10-13 00:19:28': 1, 
         u'2017-10-07 09:54:33': 1}, 
     u'Closed': {u'2017-10-06 08:04:15': 17, u'2017-10-15 00:19:35': 18, u'2017-10-11 00:19:29': 18, 
        u'2017-10-09 00:19:00': 17, u'2017-10-14 00:21:09': 18, u'2017-10-12 00:19:52': 18, 
        u'2017-10-08 00:18:58': 17, u'2017-10-10 00:19:31': 18, u'2017-10-13 00:19:28': 18, 
        u'2017-10-07 09:54:33': 17}, 
     u'Open': {u'2017-10-06 08:04:15': 5, u'2017-10-15 00:19:35': 8, u'2017-10-11 00:19:29': 8, 
        u'2017-10-09 00:19:00': 5, u'2017-10-14 00:21:09': 8, u'2017-10-12 00:19:52': 7, 
        u'2017-10-08 00:18:58': 5, u'2017-10-10 00:19:31': 8, u'2017-10-13 00:19:28': 8, 
        u'2017-10-07 09:54:33': 5}}, 


     u'DSP Engineering': { 
       u'In Progress': {u'2017-10-15 00:19:35': 1, u'2017-10-14 00:21:09': 1}}}} 


capture_len={} 

for key,value in test.items(): 
    for key1,value1 in value.items(): 
     for key3,value3 in value1.items(): 
      if key1 not in capture_len: 
       capture_len[key1]=[value3] 
      else: 
       capture_len[key1].append(value3) 

for_len={key:len(value) for key,value in capture_len.items()} 




sorted_dict=sorted(for_len, key=for_len.get) 


ordered_dict=OrderedDict() 
for key,value in test.items(): 
    for k in sorted_dict: 
     for key1,value1 in value.items(): 
      if k==key1: 
       ordered_dict[k]=value1 

final_dict={} 
for key,value in ordered_dict.items(): 
    for key2,value2 in test.items(): 
     if key2 not in final_dict: 
      final_dict[key2]=[(key,value)] 
     else: 
      final_dict[key2].append((key,value)) 

print (final_dict) 
+0

這與我正在尋找的東西非常接近,但是,它會混合鍵中的對象。試試這個列表:https://pastebin.com/0nfjffcU – Uthman