2016-11-11 202 views
1

我只是用在学校蟒蛇开始,我有一个问题我一直在试图找出了一会儿Python的排序频率

的问题是按频率列表,并在列表中还包含前给出的字符串的 函数调用

SortByFrequency(['pie', 6, 'pie', 9, 6, 7, 9, 9] 

它应该返回

[9, 9, 9, 'pie', 'pie', 6, 6, 7] 

怎么能使用python感谢 我的代码找到解决方案我已尝试尝试使用字典并以某种方式打印元素

my_Dict ={} 
for i in mylist: 
     if i not in my_dict: 
and count the occurrences 
+0

您的代码辅助字典没有意义....'如果'永远不会发生,随机'和',间距问题 – depperm

+1

你有一个很好的开始,但没有得到很远。暂时忘记排序,只需尝试使用计数来构建字典,例如'{'pie':2,6:2,9:3,7:1}'。写一些实际的代码。 –

回答

0

您正在编写字典。完成这样的:

if i not in my_dict: 
     my_dict[i] = 0 # define this entry 
    my_dict[i] += 1 # increment it (number of occurrences of i) 

然后你只需要对它进行排序,使用字典的关键:

def sortByFrequency(mylist): 
    my_dict ={} 
    for i in mylist: 
     if i not in my_dict: 
      my_dict[i] = 0 
     my_dict[i] += 1 
    return sorted(mylist, key=lambda i: -my_dict[i]) 

减号是降序排序的快捷方式。请注意,使用初始小写字母编写函数更为常见,因为初始资本通常是为类名保留的。

+0

是他们的任何方式做到没有拉姆达我不知道它是什么?并可以解释代码的最后一部分在做什么? –

1

如果这不是某种作业的,并非允许使用Python模块,不推倒重来,这是可以做到如下使用集合模块

import collections 
def SortByFrequency(lst): 
    return list(collections.Counter(lst).elements()) 

SortByFrequency(['pie', 6, 'pie', 9, 6, 7, 9, 9]) 
# this return [9, 9, 9, 'pie', 'pie', 6, 6, 7] 

我自己尝试解决这个用字典会

def SortByFrequency(mylist): 
    my_dict = {} 
    for i in mylist: 
     my_dict[i] = my_dict.get(i,0) + 1 
    return sorted(sorted(mylist,key=str), key=my_dict.get, reverse=True) 

SortByFrequency(['pie', 6, 'pie', 9, 6, 7, 9, 9]) 
# but this does not guarantee the order when we have multiple values with same frequency 
# this will return [9, 9, 9, 6, 6, 'pie', 'pie', 7] 
+0

是的,我的错误 –

0

你必须创建一个计数器

list_ = ['pie', 6, 'pie', 9, 6, 7, 9, 9] 
dict_ = {} 
for i in list_: 
    dict_[i] = dict_.get(i, 0) - 1 
# Your dict_ now is following: 
# {6: -2, 7: -1, 9: -3, 'pie': -2} 
sorted(list_, key=dict_.get) 
#=> [9, 9, 9, 'pie', 6, 'pie', 6, 7]