TypeError:“int”对象不可iterable。为什么我会犯这个错误?请帮忙

2024-05-15 22:19:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: keyinforgettopdefresultkeys
3条回答

也许你是说

for i in range(kk):

有点离题,但是:

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

should just be:

tvalues = temp.values()

示例:

>>> 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)]
>>> 

你有for i in kk,而kk只是一个整数。不能在整数上迭代,只能在sequence/iterable上迭代。

如果要从0迭代到(kk-1),可能需要for i in range(kk)

相关问题 更多 >