Python 如何根据特定字符在关键字中出现的次数对字典关键字进行排序?

Python 如何根据特定字符在关键字中出现的次数对字典关键字进行排序?,python,dictionary,Python,Dictionary,例如,我有一句格言: {"aaaa": 158,"aaaaaaaaaapppppp": 170,"ooooo":14} 我想它被排序的基础上有多少次的字符“a”出现在口述。我已经尝试了 newDict = dict(sorted(oldDict.items(),key=lambda item: item.count("x"))) 但它只是让键不排序。根据定义,dict是不排序的。在newDict赋值中,通过对

例如,我有一句格言:

{"aaaa": 158,"aaaaaaaaaapppppp": 170,"ooooo":14} 
我想它被排序的基础上有多少次的字符“a”出现在口述。我已经尝试了

newDict = dict(sorted(oldDict.items(),key=lambda item: item.count("x"))) 
但它只是让键不排序。

根据定义,dict是不排序的。在newDict赋值中,通过对结果调用
dict()
,可以从排序后的结果重新创建一个字典,从而有效地取消排序


如果要对结果进行排序,必须将其存储在其他数据结构中。sorted()的结果是一个元组列表,其中每个元组有2个元素:key、value。这通常非常适合于迭代。

您的尝试基本上是正确的,但是项是键和值对的元组,因此您只需要该对中的第一个元素(
项[0]

在版本3.7中更改:字典顺序保证为插入顺序。此行为是3.6中CPython的一个实现细节

假设所有键都是字符串,可以对它们使用
count
方法,根据
key\u sort\u字母的出现次数,按升序对新词典进行排序,如下所示:

d = {"aaaa": 158, "aaaaaaaaaapppppp": 170, "ooooo":14} 
keys_sort_letter = 'a'
>>> dict(sorted(d.items(), key=lambda item: item[0].count(keys_sort_letter)))
{'ooooo': 14, 'aaaa': 158, 'aaaaaaaaaapppppp': 170}
第一个键“ooooo”的字母“a”不出现,第二个键出现四次,最后一个键出现十次

要确保键是字符串,可以将其强制转换为:

lambda item: str(item[0]).count(keys_sort_letter))

我正在为另一个dict做同样的事情,但是按哪个字母顺序排序更大,新dict保持排序,所以我不认为是这样。字典保证从python 3.7开始排序(并在cython 3.6中实现)。“在版本3.7中更改:字典顺序保证为插入顺序。此行为是3.6中CPython的一个实现细节。”字典是无序的数据结构。它无法排序。如果要排序,请使用有序数据结构