Python dict sort排序 按照key,value

本文详细介绍并对比了多种Python字典排序方法,包括按key、value排序的技巧及一行代码解决方案,适用于不同版本的Python。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们知道Python的内置dictionary数据类型是无序的,通过key来获取对应的value。可是有时我们需要对dictionary中 的item进行排序输出,可能根据key,也可能根据value来排。到底有多少种方法可以实现对dictionary的内容进行排序输出呢?下面摘取了 一些精彩的解决办法。

最简单的方法,这个是按照key值排序:

    def sortedDictValues1(adict): 
        items = adict.items() 
        items.sort() 
    return [value for key, value in items] 

又一个按照key值排序,貌似比上一个速度要快点

def sortedDictValues2(adict): 
keys = adict.keys() 
keys.sort() 
return [dict[key] for key in keys] 

还是按key值排序,据说更快。。。而且当key为tuple的时候照样适用

def sortedDictValues3(adict): 
keys = adict.keys() 
keys.sort() 
return map(adict.get, keys) 

一行语句搞定:

[(k,di[k]) for k in sorted(di.keys())]

来一个根据value排序的,先把item的key和value交换位置放入一个list中,再根据list每个元素的第一个值,即原来的value值,排序:

def sort_by_value(d): 
items=d.items() 
backitems=[[v[1],v[0]] for v in items] 
backitems.sort() 
return [ backitems[i][1] for i in range(0,len(backitems))] 

还是一行搞定:

[ v for v in sorted(di.values())]

用lambda表达式来排序,更灵活:

#正序
sorted(d.items(), lambda x, y: cmp(x[1], y[1]))
#反序
sorted(d.items(), lambda x, y: cmp(x[1], y[1]), reverse=True) 

用sorted函数的key= 参数排序:

按照key进行排序

sorted(dict1.items(), key=lambda d: d[0])

按照value进行排序

sorted(dict1.items(), key=lambda d: d[1])

下面给出python内置sorted函数的帮助文档: 

sorted(...) 
sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

看了上面这么多种对dictionary排序的方法,其实它们的核心思想都一样,即把dictionary中的元素分离出来放到一个list中,对list排序,从而间接实现对dictionary的排序。这个“元素”可以是key,value或者item。

 

若版本低不支持sorted

将key,value 以tuple一起放在一个list中

l = []

l.append((akey,avalue))

# 用sort()
# cmp前加“-”表示降序排序

l.sort(lambda a,b :cmp(a[1],b[1]))

 

-------------------

原文:https://segmentfault.com/a/1190000004959880

Python中的字典是一种无序的数据结构,即键值对的存储和访问没有固定的顺序。在Python 3.6之前的版本中,字典的顺序是不确定的,即使你按照一定的顺序插入键值对,遍历字典时也不能保证按照插入的顺序输出。 然而,在Python 3.6版本之后,字典的内部算法发生了改变,使得字典成为有序的数据结构。这意味着无需再关注字典的顺序性问题,可以按照插入的顺序遍历字典。 如果你想要使用有序字典,可以使用Python的collections模块中的OrderedDict类。OrderedDict是一种有序字典,它会按照插入的顺序存储键值对,并且可以按照插入的顺序进行遍历。以下是一个使用OrderedDict的例子: ```python import collections my_order_dict = collections.OrderedDict() my_order_dict["name"] = "lowman" my_order_dict["age"] = 45 my_order_dict["money"] = 998 my_order_dict["hourse"] = None for key, value in my_order_dict.items(): print(key, value) ``` 输出结果会按照插入的顺序输出键值对。 另外,如果你想要在Python 3.6之前的版本中实现字典的排序,可以使用列表和sort()方法来实现。你可以将键值对以元组的形式放入列表中,并使用sort()方法按照指定的排序规则进行排序。以下是一个示例代码: ```python l = [] l.append(("name", "lowman")) l.append(("age", 45)) l.append(("money", 998)) .append(("hourse", None)) l.sort(key=lambda x: x<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Python dict 排序](https://blog.youkuaiyun.com/weixin_43955170/article/details/119276566)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值