【发布时间】:2016-05-06 14:05:44
【问题描述】:
我需要帮助来对包含 2 个键的列表进行排序。例如,如果我输入“google”,输出应该是这样的:
Letter: 'g', Frequency: 2
Letter: 'o', Frequency: 2
Letter: 'e', Frequency: 1
Letter: 'l', Frequency: 1
但相反,我得到的是:
Letter: 'e', Frequency: 1
Letter: 'g', Frequency: 2
Letter: 'l', Frequency: 1
Letter: 'o', Frequency: 2
基本上它只是对字母进行排序,而不是对频率进行排序。我想要的是先按频率排序,然后按字母排序。这是我的排序部分的代码 sn-p 和字典示例声明:
adict = {'Letter':'a', 'Frequency':0}
bdict = {'Letter':'b', 'Frequency':0}
cdict = {'Letter':'c', 'Frequency':0}
def getKey(item):
return item['Frequency']
finalArr = sorted(newArr, key = getKey)
我尝试了 lambda 排序和 itemgetter,但它仍然对字母进行排序。
这是频率更新部分(不是整个部分,只是一个示例):
for ex in range(0, len(temp)):
if temp[count] == 'a': adict['Frequency']+=1
elif temp[count] == 'b': bdict['Frequency']+=1
elif temp[count] == 'c': cdict['Frequency']+=1
如果频率不为 0,它将被分配到一个列表中:
if adict['Frequency'] != 0 : newArr.append(adict)
if bdict['Frequency'] != 0 : newArr.append(bdict)
if cdict['Frequency'] != 0 : newArr.append(cdict)
【问题讨论】:
-
所有频率都具有相同的值,那怎么办?您的示例不完整,请添加
newArrvar 的值。 -
一个有两个键的列表是一个字典。 Dict 是一种未排序的数据类型。你的代码中的 newArr 是什么,它是一个字典列表吗?需要更多代码/更好的例子。
-
我已经更新了我的帖子 Avinash,是的,@kingledion newArr 基本上是一个字典列表
标签: python sorting python-3.x