python - 按值和键元组python对字典进行排序
问题描述
我想知道如何通过作为元组的键来组织字典:首先按第一个数字排序,然后是第二个字母,然后是第三个数字。
另外,我想知道如何首先按值组织(第一个值 1,然后是值 2,然后是值 3):
输入:
d= {
(2,x,50):
{
'val1': 2,
'val2': x,
'val3': 50,
'val4': 'hu',
'val5': 'ho',
}
(1,a,30):
{
'val1': 1,
'val2': a,
'val3': 30,
'val4': 'hey',
'val5': 'hi',
},
(2,x,20):
{
'val1': 2,
'val2': x,
'val3': 20,
'val4': 'hu',
'val5': 'ho',
}
(2,b,10):
{
'val1': 2,
'val2': b,
'val3': 10,
'val4': 'hu',
'val5': 'ho',
}
}
输出:
d= {
(1,a,30):
{
'val1': 1,
'val2': a,
'val3': 30,
'val4': 'hey',
'val5': 'hi',
},
(2,b,10):
{
'val1': 2,
'val2': b,
'val3': 10,
'val4': 'hu',
'val5': 'ho',
}
(2,x,20):
{
'val1': 2,
'val2': x,
'val3': 20,
'val4': 'hu',
'val5': 'ho',
}
(2,x,50):
{
'val1': 2,
'val2': x,
'val3': 50,
'val4': 'hu',
'val5': 'ho',
}
}
我试过按键订购:
sorted(d, key = operator.itemgetter(1))
并尝试按值排序,但出现错误:
sorted(d, key = operator.itemgetter('val1', 'val2', 'val3'))
解决方案
您可以尝试对字典项进行排序,这将根据键对字典进行排序,然后可以使用字典理解将排序结果解析为字典。
d= {
(2,'x',50):
{
'val1': 2,
'val2': 'x',
'val3': 50,
'val4': 'hu',
'val5': 'ho',
},
(1,'a',30):
{
'val1': 1,
'val2': 'a',
'val3': 30,
'val4': 'hey',
'val5': 'hi',
},
(2,'x',20):
{
'val1': 2,
'val2': 'x',
'val3': 20,
'val4': 'hu',
'val5': 'ho',
},
(2,'b',10):
{
'val1': 2,
'val2': 'b',
'val3': 10,
'val4': 'hu',
'val5': 'ho',
}
}
print({i[0]: i[1] for i in sorted(d.items())})
输出
{
(1, 'a', 30): {'val1': 1, 'val2': 'a', 'val3': 30, 'val4': 'hey', 'val5': 'hi'},
(2, 'b', 10): {'val1': 2, 'val2': 'b', 'val3': 10, 'val4': 'hu', 'val5': 'ho'},
(2, 'x', 20): {'val1': 2, 'val2': 'x', 'val3': 20, 'val4': 'hu', 'val5': 'ho'},
(2, 'x', 50): {'val1': 2, 'val2': 'x', 'val3': 50, 'val4': 'hu', 'val5': 'ho'}
}
推荐阅读
- jsp - Button click doesn't result in any action in jsp file
- spring-mvc - 我们能否在不生成或使用队列中的绑定文件的情况下将我的 Java-Spring-mvc 服务连接到 IBM MQ
- c# - C# 下载保存在我的服务器上的文件选项
- mongodb - MongoDB 不会安装在 Windows 10 上(本地用户)
- python - 如何在对象的 JSON 字段中创建一个数组?
- java - Rxjava 在检索然后更新数据库中的项目时创建一个循环
- java - JAVA Code to print SQL Server to CSV returns with incomplete data
- notepad++ - 将当前活动文件与 NPP 文件夹同步为工作区树视图
- postgresql - Count entities by date that fall between start date and end date (postgres)
- python - Ansible use return value as dictionary