按整数键对dict项进行排序,特殊函数

2024-04-18 09:30:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类似于我上周问的问题: "Sorting dict items by key, beyond alphanumeric sorting"

问题是相同的,但现在我的dict的键是简单的整数:

>>>lis_nodiz = list(nodiz.items()) #list of dict items as tuples
[(2, 316),
(3, 66),
(4, 37),
(5, 15),
(6, 10),
(7, 4),
(8, 3),
(9, 1),
(10, 2),
(11, 1),
(12, 1),
(45, 1),
(109, 1),
(16, 1),
(126, 1)]

你可能猜到了,我正在搜索这个有序的元组列表:

[(2, 316),
(3, 66),
(4, 37),
(5, 15),
(6, 10),
(7, 4),
(8, 3),
(9, 1),
(10, 2),
(11, 1),
(12, 1),
(16, 1),
(45, 1),
(109, 1),
(126, 1)]

我曾尝试重用Padraic Cunningham建议的“key_func”,不幸的是,这个函数似乎只适用于字符串类型的dict键:

def key_func(x):
"""'a0p12' -> (0, 12)"""
return tuple(int("".join(v)) for k,v in groupby(x[0], key=str.isdigit) if k)

>>>lis_nodiz_od = sorted(nodiz.items(), key=key_func)
TypeError: expected string or buffer

如何修改函数,或者如何用另一种方法来实现我的目的? 如果有人能解释一下“key_func”是如何工作的,以及为了使它能与整数一起工作而要做的正确修改,我将非常感激;这样我就可以了解更多关于Python编程的知识,而不仅仅是解决我现在的问题! 非常感谢大家!你知道吗


Tags: ofkey函数byitems整数dictlist
2条回答

无需在第一个键上使用lambda进行排序:这是元组的默认值。你知道吗

>>> sorted(x)
[(2, 316), (3, 66), (4, 37), (5, 15), (6, 10), (7, 4), (8, 3), (9, 1), (10, 2), (11, 1), (12, 1), (16, 1), (45, 1), (109, 1), (126, 1)]

它将自动在第一个成员上排序,如果它们相等,则按第二个成员排序,以此类推

调用sorted()list.sort()作为:

# sorted(): Creates new list with sorted order
>>> sorted(lis_nodiz)  
[(2, 316), (3, 66), (4, 37), (5, 15), (6, 10), (7, 4), (8, 3), (9, 1), (10, 2), (11, 1), (12, 1), (16, 1), (45, 1), (109, 1), (126, 1)]

# list.sort(): sort the existing  list
>>> lis_nodiz.sort()
>>> lis_nodiz
[(2, 316), (3, 66), (4, 37), (5, 15), (6, 10), (7, 4), (8, 3), (9, 1), (10, 2), (11, 1), (12, 1), (16, 1), (45, 1), (109, 1), (126, 1)]

其中lis_nodiz是前面提到的元组列表。你知道吗

注意:这里不需要指定key。默认情况下,对第0个索引进行字典排序;如果值相同,则对第1个索引进行排序。你知道吗

相关问题 更多 >