对多个子词典值对词典词典进行排序
我有一本字典,看起来像这样:
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'},
}
实际结果是分离序列号和站点位置。我想将它们放在排序对象中。我怎样才能做到这一点?
-
这就是你想要的吗?
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'})]