Python字典值的排序。

12 浏览
0 Comments

Python字典值的排序。

我有两个字典,dict1和dict2,它们包含相同的键,但键的值不同。我想要做的是对每个字典的值进行从大到小的排序,然后给每个值一个1-N的排名,其中1代表最大的值。接下来,我想要得到每个字典中相同键的值的排名差异。例如:

dict1 = {a:0.6, b:0.3, c:0.9, d:1.2, e:0.2}

dict2 = {a:1.4, b:7.7, c:9.0, d:2.5, e:2.0}

#按值排序后如下:

dict1 = {d:1.2, c:0.9, a:0.6, b:0.3, e:0.2}

dict2 = {c:9.0, b:7.7, d:2.5, e:2.0, a:1.4}

#对值进行排名得到如下:

dict1 = {d:1, c:2, a:3, b:4, e:5}

dict2 = {c:1, b:2, d:3, e:4, a:5}

#计算排名之间的差异可以像这样:

diffs = {}

for x in dict1.keys():

diffs[x] = (dict1[x] - dict2[x])

#diffs如下:

diffs[a] = -2

diffs[b] = 2

diffs[c] = 1

diffs[d] = -2

diffs[e] = 1

我知道字典是随机的,不可排序的,但也许有一种方法可以将键和值放入列表中?我面临的主要挑战是按值(从大到小)对键和值进行排序,然后将值更改为在排序列表中的相应排名。

0
0 Comments

问题的出现原因是用户在使用Python进行字典值的排序时遇到了困难。根据用户提供的信息,问题可能出现在Python的版本不同导致的。如果用户使用的是Python 2.7版本,则可以使用OrderedDict来实现字典值的排序。根据Python 2.7的文档,可以使用以下代码来实现字典值的排序:OrderedDict(sorted(d.items(), key=d.get))。如果用户使用的是Python 2.4-2.6版本,则可以通过从pypi安装OrderedDict来解决问题。可以在这个链接下载OrderedDict,或者使用setuptools运行easy_install ordereddict进行安装。

然后,其他用户对于这个问题提出了一些建议和解释。其中一个用户认为使用OrderedDict并不能解决问题,因为实际上并不需要对字典进行排序。此外,他指出之前提供的key函数是错误的。另一个用户承认了这个错误,并表示会进行修改。

总结起来,这个问题的出现是因为用户在使用Python进行字典值的排序时遇到了困难。解决方法取决于Python的版本,如果是2.7版本可以使用OrderedDict,如果是2.4-2.6版本则需要安装OrderedDict。在讨论中还涉及到了一些解释和修改的建议。

0
0 Comments

问题:如何按照字典的值对字典进行排序?

原因:问题的提出者需要按照字典的值对字典进行排序,以得到键和值按照值进行排序的结果。他认为使用OrderedDict是解决这个问题的正确方法。

解决方法:问题的提出者使用了OrderedDict和sorted函数来对字典进行排序。首先,他创建了两个字典d1和d2,并使用sorted函数对它们进行排序,排序的依据是字典的值。然后,他将排序后的字典转换为OrderedDict对象,并分别得到了排序后的键k1和k2。最后,他使用字典推导式计算了diff字典,其中键为k1中的元素,值为该元素在k2中的索引与当前索引之差。

这个解决方法看起来并不高效,因为在对大型字典进行排序的时候会消耗较长的时间。问题的提出者提到了另一个解决方法sven.py,但它的效率也不高。

文章完。

0
0 Comments

问题:python字典值排序的原因是什么以及如何解决?

在上述内容中,提到了两种解决方案,一种适用于较小的字典,另一种适用于较大的字典。第一种方案使用了sorted()函数和字典的get()方法来实现字典值排序,然后通过计算每个键在排序后的列表中的索引差来得到差异。第二种方案使用了map()和reversed()函数来进行排序和计算索引,然后同样通过计算差异来得到结果。

然后,有人提出了使用sorted()函数和lambda表达式的方式来进行排序,认为这样更快。但也有人指出,字典查找的速度很快,而且通过调用Python函数来查找每个元素会增加开销。此外,这种方式返回的列表与之前的方式不同,需要进行额外的处理才能得到结果。

接下来,有人对第二种方案提出了疑问,认为排名系统可能存在问题。原因是在较大的数据集中,有多个相同值的实例,而排序可能出现错误。对此,提出方解释说他将排名按相反的顺序进行了处理,因为他认为你只对差异感兴趣,而不是排名本身。如果要按照你指定的方式进行排名,只需在sorted()函数调用中添加reverse=True参数,并再次切换差异的符号。

python字典值排序问题的原因是需要对字典的值进行排序,并计算差异。解决方法是根据字典的大小选择合适的方案,并根据需要调整排序和差异的计算方式。

0