对多个子词典值对词典词典进行排序

发布于 2021-01-29 16:31:43

我有一本字典,看起来像这样:

myDict = {
    'SER12346': {'serial_num': 'SER12346', 'site_location': 'North America'},
    'ABC12345': {'serial_num': 'ABC12345', 'site_location': 'South America'},
    'SER12345': {'serial_num': 'SER12345', 'site_location': 'North America'},
    'SER12347': {'serial_num': 'SER12347', 'site_location': 'South America'},
    'ABC12346': {'serial_num': 'ABC12346', 'site_location': 'Europe'}
}

我的目标是按照每个子字典的site_location和对字典进行排序serial_num

使用我在这个问题中找到的代码-对字典python的字典进行排序-我能够对它进行排序,但这并不是我所期望的。

这是我的代码:

import pprint
items = ((k, k2, v) for k in myDict for k2, v in myDict[k].items())
ordered = sorted(items, key=lambda x:x[-1], reverse=False)
pprint.pprint(ordered)

这是我得到的结果:

[('ABC12346', 'site_location', 'Europe'),
 ('SER12345', 'site_location', 'North America'),
 ('SER12346', 'site_location', 'North America'),
 ('SER12347', 'site_location', 'South America'),
 ('ABC12345', 'site_location', 'South America'),
 ('ABC12346', 'serial_num': 'ABC12346'),
 ('SER12345', 'serial_num': 'SER12345'),
 ('SER12346', 'serial_num': 'SER12346'),
 ('SER12347', 'serial_num': 'SER12347'),
 ('ABC12345', 'serial_num': 'ABC12345')]

我期待更多这样的事情:

{
    'ABC12346': {'serial_num': 'ABC12346', 'site_location': 'Europe'}
    'SER12345': {'serial_num': 'SER12345', 'site_location': 'North America'},
    'SER12346': {'serial_num': 'SER12346', 'site_location': 'North America'},
    'SER12347': {'serial_num': 'SER12347', 'site_location': 'South America'},
    'ABC12345': {'serial_num': 'ABC12345', 'site_location': 'South America'},
}

实际结果是分离序列号和站点位置。我想将它们放在排序对象中。我怎样才能做到这一点?

关注者
0
被浏览
45
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    这就是你想要的吗?

    dicts = [{k: v} for (k,v) in myDict.items()]
    dicts.sort(key=lambda d: (d.values()[0]['site_location'], d.values()[0]['serial_num'],))
    

    输出结果:

    import pprint
    pprint.pprint(dicts)
    

    是:

    [{'ABC12346': {'serial_num': 'ABC12346', 'site_location': 'Europe'}},
     {'SER12345': {'serial_num': 'SER12345', 'site_location': 'North America'}},
     {'SER12346': {'serial_num': 'SER12346', 'site_location': 'North America'}},
     {'ABC12345': {'serial_num': 'ABC12345', 'site_location': 'South America'}},
     {'SER12347': {'serial_num': 'SER12347', 'site_location': 'South America'}}]
    

    编辑:我正在为您的输出格式的答案,但这可能更有意义:

    dicts = myDict.items()
    dicts.sort(key=lambda (k,d): (d['site_location'], d['serial_num'],))
    

    输出:

    [('ABC12346', {'serial_num': 'ABC12346', 'site_location': 'Europe'}),
     ('SER12345', {'serial_num': 'SER12345', 'site_location': 'North America'}),
     ('SER12346', {'serial_num': 'SER12346', 'site_location': 'North America'}),
     ('ABC12345', {'serial_num': 'ABC12345', 'site_location': 'South America'}),
     ('SER12347', {'serial_num': 'SER12347', 'site_location': 'South America'})]
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看