python 中 dict 的 sorted 排序

发布于 2021-03-14 09:59:31 字数 2050 浏览 1241 评论 0

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

下面摘取了一些精彩的解决办法。

按 key 排序

最简单的方法,这个是按照 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 排序

根据 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(d.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 进行排序

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

按照 value 进行排序

print 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。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

lorenzathorton8

文章 0 评论 0

Zero

文章 0 评论 0

萧瑟寒风

文章 0 评论 0

mylayout

文章 0 评论 0

tkewei

文章 0 评论 0

17818769742

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文