python - 根据列表列表中的十六进制地址对内部列表进行排序
问题描述
我有以下列表列表,我试图根据十六进制地址对内部列表进行排序。
a = [['abc', 10, [['3840', 'name'], ['3844', 'rank'], ['0000', 'dob']]],
['xyz', 20, [['2840', 'name'], ['2844', 'rank'], ['0000', 'dob']]]]
这是我尝试过的:
a.sort(key=lambda x: int(x[2][0][0], 16))
输出:它根据十六进制地址对整个列表(不仅仅是内部列表)进行排序
[['xyz', 20, [['2840', 'name'], ['2844', 'rank'], ['0000', 'dob']]],
['abc', 10, [['3840', 'name'], ['3844', 'rank'], ['0000', 'dob']]]]
预期输出:我只需要对内部列表进行排序,如下所示
[['abc', 10, [['0000', 'dob'], ['3840', 'name'], ['3844', 'rank']]],
['xyz', 20, [['0000', 'dob'], ['2840', 'name'], ['2844', 'rank']]]]
有人可以帮我解决这个问题吗?
解决方案
您可以执行以下操作,在一个简单的循环中对内部列表进行排序:
for *_, lst in a:
lst.sort(key=lambda x: int(x[0], 16))
a
# [['abc', 10, [['0000', 'dob'], ['3840', 'name'], ['3844', 'rank']]],
# ['xyz', 20, [['0000', 'dob'], ['2840', 'name'], ['2844', 'rank']]]]
如果你喜欢单线,你可以使用这个理解:
a[:] = [[*y, sorted(lst, key=lambda x: int(x[0], 16))] for *y, lst in a]
推荐阅读
- python - 我有一个 numpy 二维复数数据,如何使用这个数组进行 2D-FFT 并绘制结果
- python - 如何在python中同时获取String和Int输入
- r - R中2小时之间的平均时间
- flutter - Flutter 展开底部导航栏以显示更多选项
- android - Android DocumentProvider 崩溃 Files-App / DocumentsUI
- java - 如何存储大量对象的参数?
- spring-boot - Spring-Boot:无法创建自定义安全表达式
- hdr - 有没有办法判断一张图片是不是一张HDR图片?
- python - 决策树回归器中的网格交叉验证问题
- python - hstack 噪声和图像