2016-11-11 76 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]