GVKun编程网logo

python中如何按值对字典排序?(python根据值对字典排序)

16

如果您想了解python中如何按值对字典排序?和python根据值对字典排序的知识,那么本篇文章将是您的不二之选。我们将深入剖析python中如何按值对字典排序?的各个方面,并为您解答python根据

如果您想了解python中如何按值对字典排序?python根据值对字典排序的知识,那么本篇文章将是您的不二之选。我们将深入剖析python中如何按值对字典排序?的各个方面,并为您解答python根据值对字典排序的疑在这篇文章中,我们将为您介绍python中如何按值对字典排序?的相关知识,同时也会详细的解释python根据值对字典排序的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

python中如何按值对字典排序?(python根据值对字典排序)

python中如何按值对字典排序?(python根据值对字典排序)

我有一个从数据库中的两个字段读取的值字典:字符串字段和数字字段。字符串字段是唯一的,因此这是字典的键。

我可以对键进行排序,但是如何根据值进行排序?

答案1

小编典典

Python 3.7+或CPython 3.6

字典在Python 3.7+中保留插入顺序。在CPython 3.6中相同,但是它是一个实现细节。

>>> x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}>>> {k: v for k, v in sorted(x.items(), key=lambda item: item[1])}{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}

要么

>>> dict(sorted(x.items(), key=lambda item: item[1])){0: 0, 2: 1, 1: 2, 4: 3, 3: 4}

较旧的Python

无法对字典进行排序,只能获得已排序字典的表示形式。字典本质上是无序的,但其他类型(例如列表和元组)不是。因此,你需要一种有序的数据类型来表示排序后的值,这将是一个列表-可能是元组列表。

例如,

import operatorx = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}sorted_x = sorted(x.items(), key=operator.itemgetter(1))

sorted_x将是按每个元组中第二个元素排序的元组列表。dict(sorted_x) == x

对于那些希望对键而不是值进行排序的人:

import operatorx = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}sorted_x = sorted(x.items(), key=operator.itemgetter(0))

在Python3中,由于不允许拆包[1],我们可以使用

x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}sorted_x = sorted(x.items(), key=lambda kv: kv[1])

如果要将输出作为字典,则可以使用collections.OrderedDict:

import collectionssorted_dict = collections.OrderedDict(sorted_x)

python – 如何按这两个值对这个元组列表进行排序?

python – 如何按这两个值对这个元组列表进行排序?

我有一个元组列表:[(2,Operation.SUBSTITUTED),(1,Operation.DELETED),(2,Operation.INSERTED)]

我想以两种方式对此列表进行排序:

首先是它的第一个值乘以升值,即1,2,3 ……等
其次是按反向字母顺序排列的第二个值,即Operation.SUBSTITITUTED,Operation.INSERTED,Operation,DELETED

所以上面的列表应该排序为:

[(1,Operation.INSERTED)]

我如何排序此列表?

解决方法

由于排序为 guaranteed to be stable,您可以分两步完成:

lst = [(2,'Operation.SUBSTITUTED'),'Operation.DELETED'),'Operation.INSERTED')]

res_int = sorted(lst,key=lambda x: x[1],reverse=True)
res = sorted(res_int,key=lambda x: x[0])

print(res)

# [(1,'Operation.INSERTED')]

Python-如何按键对字典排序?

Python-如何按键对字典排序?

如何解决Python-如何按键对字典排序??

标准Python字典是无序的。即使你对(key,value)对进行了排序,也无法以dict保留顺序的方式存储它们。

最简单的方法是使用OrderedDict,它可以记住元素插入的顺序:

In [1]: import collections

In [2]: d = {2:3, 1:89, 4:5, 3:0}

In [3]: od = collections.OrderedDict(sorted(d.items()))

In [4]: od
Out[4]: OrderedDict([(1, 89), (2, 3), (3, 0), (4, 5)])

没关系od打印方式;它会按预期工作:

In [11]: od[1]
Out[11]: 89

In [12]: od[3]
Out[12]: 0

In [13]: for k, v in od.iteritems(): print k, v
   ....: 
1 89
2 3
3 0
4 5

Python 3

对于Python 3用户,需要使用.items()而不是.iteritems():

In [13]: for k, v in od.items(): print(k, v)
   ....: 
1 89
2 3
3 0
4 5

解决方法

这将是一个很好的方式,从去{2:3,1:89,4:5,3:0}{1:89,2:3,3:0,4:5}?
我检查了一些帖子,但它们都使用了返回元组的”sorted” 运算符。

Python-如何根据字典的值对字典列表进行排序?

Python-如何根据字典的值对字典列表进行排序?

如何解决Python-如何根据字典的值对字典列表进行排序??

使用密钥而不是cmp看起来更干净:

newlist = sorted(list_to_be_sorted, key=lambda k: k[''name'']) 

或如JFSebastian和其他人所建议的,

from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter(''name'')) 

为了完整性(如fitzgeraldsteele的评论中指出的那样),请添加reverse=True降序排列

newlist = sorted(l, key=itemgetter(''name''), reverse=True)

解决方法

我有一个字典列表,希望每个项目都按特定的属性值排序。

考虑下面的数组,

[{''name'':''Homer'',''age'':39},{''name'':''Bart'',''age'':10}]

当排序name,应该成为

[{''name'':''Bart'',''age'':10},{''name'':''Homer'',''age'':39}]

Python中 字典排序、列表排序

Python中 字典排序、列表排序

   一、字典排序

在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的。因此,为了使统计得到的结果更方便查看需要进行排序。Python中字典的排序分为按“键”排序和按“值”排序。

1、按“值”排序

   按“值”排序就是根据字典的值进行排序,可以使用内置的sorted()函数。

    sorted(iterable[, cmp[, key[, reverse]]])

 

(1)iterable:是可迭代类型类型;

(2)cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项;

(3)key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项;

(4)reverse:排序规则. reverse = True 或者 reverse = False,有默认值,默认为升序排列(False)。

返回值:是一个经过排序的可迭代类型,与iterable一样。一般来说,cmp和key可以使用lambda表达式。

如果对字典进行排序,常用的形式如下:sorted(dict.items(), key=lambda e:e[1], reverse=True), 其中e表示dict.items()中的一个元素,e[1]则表示按 值排序如果把e[1]改成e[0],那么则是按键排序,reverse=False可以省略,默认为升序排列。

说明:字典的items()函数返回的是一个列表,列表的每个元素是一个键和值组成的元组。因此,sorted(dict.items(), key=lambda e:e[1], reverse=True)返回的值同样是由元组组成的列表。

使用示例代码:

 

user={}
#
#填充字典
#
sort=sorted(user.items(),key=lambda e:e[1],reverse=True)   #排序
for item in sort:
    print >>fp,"%-30s %s"  %(item[0],item[1])

 

 

 

2、按“键”排序

    对字典进行按键排序也可以使用上面的sorted函数,只要改为sorted(dict.items(), key=lambda e:e[0], reverse=True)就可以了。不过除了这个方式之外,还有另外的方法:通过列表的排序来达到使字典有序的目的。

   用到的知识:字典的keys()函数返回列表形式的键值,将该列表排序即可。列表的排序使用列表的sort()函数,详细内容参考列表排序。

总结:

 

方法1:最简单的方法,排列元素(key/value对),然后挑出值。字典的items方法,会返回一个元组的列表,其中每个元组都包含一对项目 ——键与对应的值。此时排序可以sort()方法。

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

方法2:使用排列键(key)的方式,挑出值,速度比方法1快。字典对象的keys()方法返回字典中所有键值组成的列表,次序是随机的。需要排序时只要对返回的键值列表使用sort()方法。

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

方法3:通过映射的方法去更有效的执行最后一步

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

方法4:对字典按键排序,用元组列表的形式返回,同时使用lambda函数来进行;

sorted(iterable[, cmp[, key[, reverse]]]

cmp和key一般使用lambda

 

如:
>>> d={"ok":1,"no":2}
对字典按键排序,用元组列表的形式返回
>>> sorted(d.items(), key=lambda d:d[0])
[(''no'', 2), (''ok'', 1)]
对字典按值排序,用元组列表的形式返回
>>> sorted(d.items(), key=lambda d:d[1])

[(''ok'', 1), (''no'', 2)]

                            二、列表排序

对列表进行排序使用列表的sort()函数。

1、sort()函数

   sort()函数使用固定的排序算法对列表排序。sort()函数对列表排序时改变了原来的列表,从而让其中的元素能按一定的顺序排列,而不是简单的返回一个已排序的列表副本。

   注意sort()函数改变原来的列表,函数返回值是空值即None。因此,如果需要一个已排好序的列表副本,同时又要保留原有列表不变的时候,就不能直接简单的使用sort()函数。为了实现上述功能使用sort()的方法是:先获取列表X的副本Y,然后再对Y进行排序。代码如下:

 

x=[4,6,2,1,7,9,4]
y=x[:]
y.sort()
print x
print y

 

结果如下:

 

[4, 6, 2, 1, 7, 9, 4]

[1, 2, 4, 4, 6, 7, 9]

 

 

说明:调用x[:]得到的是包含了x所有元素的分片,这是一种很有效率的复制整个列表的方法。通过y=x简单的将x复制给y是没有用的,因为这样做就让x和y都指向了同一个列表了。

2、sorted()

  另外一种获取已排序的列表副本的方法是使用sorted()函数。注意,sorted()函数可以用于任何可迭代的对象。

 

x=[4,6,2,1,7,9,4]
y=sorted(x)
print x
print y

 

结果:

 

[4, 6, 2, 1, 7, 9, 4]

[1, 2, 4, 4, 6, 7, 9]

关于python中如何按值对字典排序?python根据值对字典排序的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于python – 如何按这两个值对这个元组列表进行排序?、Python-如何按键对字典排序?、Python-如何根据字典的值对字典列表进行排序?、Python中 字典排序、列表排序等相关知识的信息别忘了在本站进行查找喔。

本文标签: