2016-06-22 4 views
-2

Я пытаюсь вычислить частоту слов и сортировать частоту от большого до малого , но сталкиваются с выше список объектов не имеет ключевую проблему атрибутаAttributeError: «список» объект имеет нет атрибута «ключи»

Я думаю, что результат действительно так как, может ли это не «ключ»? спасибо.

#encoding=utf-8 
import os 


result = {} 
if os.path.exists("test.txt"): 
    day_file = open("test.txt").read() 
    day_file_list = day_file.split(" ") 

    for i in day_file_list: 
       # print "i: s" + str(i) + "e" 
     if i == "#" or " ": 
      day_file_list.remove(i) 
         #continue 
      if i not in result: 
       result[i] = 1 
      else: 
       result[i] = result[i] + 1 
       # print "result i: " + str(result[i]) 

result = sorted(result.items(), key = lambda item: item[1], reverse=True) 


for k in result.keys(): 
    print result[k] 
+4

* «Я думаю, что результат действительно DIC» * - как, учитывая, что вы только что сказали, Python, что это список, не могли бы вы, возможно, до сих пор считают, что ? – jonrsharpe

ответ

2

Встроенная функция sorted принимает итератор в качестве аргумента и возвращает список

Вам потребуется некоторое дальнейшее преобразование, чтобы получить Dict, который имеет атрибут keys, чтобы избежать этого исключения

result = sorted(result.items(), key = lambda item: item[1], reverse=True) 
# result is now a list, check it with "print type(result)" 
for k in result.keys(): # trying to access list's keys, which is not a thing 

Но превращение его в диктофон не то, что вы хотите. Вместо этого, поскольку sorted(result.items()) стал списком элементов dict в отсортированном порядке, вам не нужно перебирать ключи dict для получения элементов. Есть ли что-то подобное после result = sorted.. линии:

for i in result: 
    print i 
+0

точно, тип печати (результат) для к в результате: \t печати к [0] + ул (к [1]) – Jason