2017-10-15 159 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