定义一个函数,计算给定的直方图
弦。字符必须出现在列表中
频繁到最频繁。例如,histo(s)是
histo('implemented')。(相同频率的字符必须出现在
要实现排序,请使用python内置函数[('t', 1), ('p', 1), ('n', 1), ('l', 1), ('i', 1), ('d', 1), ('m',
2), ('e', 3)]。
这是我的作品:def keyf(p):
x,y = p
return (y,x)
s = "implemented"
d = {}
for c in s:
d[c] = d.get(c, 0) + 1
dlist = list(d.items())
dlist = sorted(dlist, key = keyf, reverse = False)
在我运行之后,dlist是sorted。问题是具有相同频率的一对中的第一个元素不是按降序排列的,如何解决这个问题?
我试着把
dlist = sorted(dlist, reverse = True)
最后,但没用。
最佳答案
假设你想要的结果是-
[('t',1)、('p',1)、('n',1)、('l',1)、('i',1)、('d',1)、('m',2)、('e',3)]
在这种情况下,需要对两个条件进行排序:频率的升序和alphbet的降序(对于相同的频率)。为此,您需要将第一个频率更改为负频率的降序,使两个排序条件都按降序排列,然后按降序排列完整列表(或者您可以执行相反的操作,并按升序排列完整列表)。示例->>> def keyf(p):
... x,y = p
... return (-y,x)
...
>>> s = "implemented"
>>> d = {}
>>> for c in s:
... d[c] = d.get(c, 0) + 1
...
>>>
>>> dlist = list(d.items())
>>> dlist = sorted(dlist, key = keyf, reverse = True)
>>> print(dlist)
[('t', 1), ('p', 1), ('n', 1), ('l', 1), ('i', 1), ('d', 1), ('m', 2), ('e', 3)]