Python按特定定义的ru对项目进行排序

2024-09-26 18:11:01 发布

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

假设我有一个dict:d={'Abc':5,'Jack':4,'amy':9,'Tom':0,'Abc':5}

如果我想写一个函数,如果我把这个函数传递给内置的sort函数,比如list(d).sort(function),sort函数会根据值对列表进行排序,如果有相同的值,则按它们的键(字母顺序)排序。所以,在本例中,d={'Abc':5,'Jack':4,'amy':9,'Tom':0,'Abc':5,'TAM':0}返回['amy','Abc','Abc','Jack','TAM','Tom'] 函数应该如下所示:

def arrange_items(something, thing,**may be a function**): 
        if something < thing:
                return -1 
        elif something > thing:
                return 1 
        etc

如果我打个电话_列表.排序(整理物品),我应该把整理好的清单拿回来

提前谢谢你

规范修改(另一个问题): 如果我有twitter用户名的dict,dict的格式如下:

^{pr2}$

用户的人气是指关注这个特定用户的人数,在上面的例子中,MiniT的流行度至少是一个b/c至少有一个用户关注MiniT。在

假设我有一个twitter用户名列表,比如L1=['JonhZ','MiniT',等等],我想根据用户的流行程度对L1进行排序(高人气优先)。dict已在全局命名空间中定义(我们可以直接访问dict)。此排序函数的要求是使用L1.sort(pass_function) 如何编写pass_函数,使sort根据用户的流行程度自动对L1排序。在

谢谢你的帮助


Tags: 函数用户l1列表排序functionsortdict
2条回答

使用list(d).sort(function)无法实现这一点,因为您将得到一个带有字典键的列表。您可以通过其他方法实现您的目标:

l1 = sorted(d.items(), key=lambda x: (x[1], x[0]))
l2 = sorted(l1, key=lambda x: x[1], reverse=True)
result = [x[0] for x in l2]

此方法将字典转换为(键,值)元组的列表。然后l1按值排序,l2按键排序。因为python有一个稳定的排序算法,所以对于相同的键,值的顺序是保持不变的。在

编辑:Ignacio Vazquez Abrar的方法类似,但更优雅,因为列表只需排序一次。在

[k for k, v in sorted(d.iteritems(), key=lambda x: (-x[1], x[0].lower()))]

编辑:

(我拒绝使用“dict”这个名字,因为它隐藏了一个内置项,而隐藏它是愚蠢的)

^{pr2}$

相关问题 更多 >

    热门问题