def fre(dic, k):
max_k = dic.keys()[0]
max_v = dic.values()[0]
while len(dic2) < k:
for key, value in dic.items():
if max_v < value:
max_k = key
max_v = value
dic2[max_k] = max_v
del dic[max_k]
return dic2
# dic is a dictionary, k is an int
这个问题是得到dic中的k最大值并得到匹配的key:value对。但我遇到了运行问题,并得到了关键错误:1。你知道吗
问题是,每次通过循环时,都会将
max_k
和max_v
留给刚找到的键值对。你知道吗因为这是最大值,所以字典中的其他值都不会更大。所以在循环结束时,仍然有相同的
max_k
和max_v
。然后您将再次尝试del dic[max_k]
,它将引发一个KeyError
,因为您已经删除了它。你知道吗解决方案很简单:使用将
max_k
和max_v
设置为第一个元素的代码,并将其移动到外循环中,这样它就可以每次运行,而不仅仅是第一次运行:但是,当我们在做这件事的时候,有更容易(或者至少更难犯微妙的错误)的方法来做到这一点。你知道吗
最明显的是只sort the items by value,然后取第一个
k
:有关键函数如何工作以及
itemgetter
的更多信息,请参见Sorting HOWTO。你知道吗但你可以提高效率。} 可以做得更好,它只需要
sorted
显然必须对所有n
值进行排序,只需获取最上面的k
,因此需要O(n)
空间和O(n log n)
时间。如果k
比n
小很多,那么使用^{O(k)
空间和O(n log k)
时间:不管怎样,这都不会从
dic
中删除密钥;如果需要,可以手动执行此操作:相关问题 更多 >
编程相关推荐