2011-04-28 5 views
3
def get_top_k(frequency, k): 
    temp = frequency 
    key = "" 
    tvalues = [] 
    values = [] 
    kk = int(k) 
    i = 0 
    for i in temp.keys(): 
     key = i 
     num = [int(frequency[key])] 
     tvalues += num 
    tvalues = bubble_sort(tvalues) 
    i = 0 
    for i in kk: 
     num = [int(tvalues[i])] 
     values += num 
    print(values) 
    i = 0 
    result = {} 
    for i in kk: 
     result += {(str(temp[values[i]])):(int(values[i]))} 
    return result 

답변

1

때문에 도와주세요?

2

당신은 for i in kk을 가지고 kk는 정수입니다. 정수를 반복 할 수는 없으며 시퀀스/반복 가능 조건에서만 반복 할 수 있습니다.

0에서 (kk-1)까지 반복하려는 경우 for i in range(kk)이 필요합니다.

for i in temp.keys(): 
    key = i 
    num = [int(frequency[key])] 
    tvalues += num 

should just be: 

tvalues = temp.values() 

예 :

+0

'xrange'도 아프지 않습니다. ;) – aviraldg

+0

@Aviral는 파이썬 3.x를 아니라면 :) –

6

은 아마 당신은

for i in range(kk): 
+1

더 설명 : 당신은 숫자의 순서를 반복해야하는 경우, 내장 함수 범위는() 유용합니다. 그것은 등차 수열을 포함하는리스트를 생성하고, 예를 들면 : '>>> 범위 (10) ' '[0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ' (출처 : HTTP//docs.python.org/release/1.5.1p1/tut/range.html) 3.3 용 "범위"링크 - http://docs.python.org/3.3/library/stdtypes.html?highlight=range #범위 – harperville

3

주제 조금 떨어져 있지만, 의미

>>> D = {'a':1, 'b':2, 'c':3, 'd':4} 
>>> D.keys() 
['a', 'c', 'b', 'd'] 
>>> D.values() 
[1, 3, 2, 4] 
>>> D.items() 
[('a', 1), ('c', 3), ('b', 2), ('d', 4)] 
>>> 

및 코드이 변경 될 수있는 것 같습니다 :

>>> D = {'a':1, 'b':2, 'c':3, 'd':4} 
>>> def get_top_k(D, k): 
...  return sorted(D.items(), reverse=True, key=lambda x: x[1])[:k] 
... 
>>> get_top_k(D, 2) 
[('d', 4), ('c', 3)] 
>>> 
관련 문제