我有一个从带有3个特征键的dict转换而来的列表,例如
{('consumer0', 'consumer0', 0): 0}
要对列表进行排序,我所做的是
time = np.arange(1)
agent = ['consumer0', 'consumer10', 'consumer11', 'consumer20',
'consumer1', 'consumer2', 'consumer3', 'consumer4',
'consumer5', 'consumer6', 'consumer7', 'consumer8',
'consumer9']
P_nm = {}
for t in time:
for p1 in agents:
for p2 in agents:
P_nm[p1, p2, t] = t
P_nm = [(k, v) for k, v in P_nm.items()]
P_nm.sort(key=lambda k: (k[0][2], k[0][0], k[0][1]))
我得到的结果如下:
[(('consumer0', 'consumer0', 0), 0),
(('consumer0', 'consumer1', 0), 0),
(('consumer0', 'consumer10', 0), 0),
(('consumer0', 'consumer11', 0), 0),
(('consumer0', 'consumer2', 0), 0),
(('consumer0', 'consumer20', 0), 0),
(('consumer0', 'consumer3', 0), 0),
...]
如何对列表进行排序并获得类似的结果
[(('consumer0', 'consumer0', 0), 0),
(('consumer0', 'consumer1', 0), 0),
(('consumer0', 'consumer2', 0), 0),
(('consumer0', 'consumer3', 0), 0),
(('consumer0', 'consumer4', 0), 0),
...
(('consumer0', 'consumer10', 0), 0),
(('consumer0', 'consumer11', 0), 0)
...
]
有一个名为^{} 的库,它完全满足您的需要。它做了一些类似于@Chris's comment建议的事情,但以更一般的方式,并且涵盖了更多的corner cases
natsort
在anaconda和PyPi中可用,因此conda install natsort
和pip install natsort
应该都能工作要使用它,请从^{} 函数开始,类似于内置的^{} ,但要使用所需的功能
因为
natsort
在解压元素结构方面非常聪明,所以您的案例可以简化为因为这可能会出现,我不是natsort(this guyis)的作者。只是一个快乐的用户
相关问题 更多 >
编程相关推荐