【发布时间】:2016-11-11 04:35:32
【问题描述】:
我有一本姓名字典和姓名在电话簿中出现的次数:
names_dict = {
'Adam': 100,
'Anne': 400,
'Britney': 321,
'George': 645,
'Joe': 200,
'John': 1010,
'Mike': 500,
'Paul': 325,
'Sarah': 150
}
最好不使用sorted(),我想遍历字典并创建一个仅包含前五个名称的新字典:
def sort_top_list():
# create dict of any 5 names first
new_dict = {}
for i in names_dict.keys()[:5]:
new_dict[i] = names_dict[i]:
# Find smallest current value in new_dict
# and compare to others in names_dict
# to find bigger ones; replace smaller name in new_dict with bigger name
for k,v in address_dict.iteritems():
current_smallest = min(new_dict.itervalues())
if v > current_smallest:
# Found a bigger value; replace smaller key/ value in new_dict with larger key/ value
new_dict[k] = v
# ?? delete old key/ value pair from new_dict somehow
我似乎能够创建一个新字典,每当我们遍历 names_dict 并找到一个高于我们在 new_dict 中的名称/计数时,它就会获得一个新的键/值对。但是,在我们从 names_dict 中添加较大的之后,我不知道如何从 new_dict 中删除较小的。
有没有更好的方法 - 无需导入特殊库或使用 sorted() - 来遍历字典并创建具有最高值的前 N 个键的新字典?
【问题讨论】:
-
您有什么特别的原因不想使用
sorted? -
这只是一个练习。我知道 sorted 被大量使用,但我想看看是否有可能没有任何“额外”的东西,比如 sorted(字典迭代器,如果可以的话)。我在 SO 上看到了一些此类问题的答案,但他们使用的是 sorted。
-
你可以循环遍历字典(或它的硬拷贝)并每次弹出最大值,五次。只要记住每次更换最高温度时都要存储密钥
-
没有什么可以阻止你自己做。您可能只需编写自己的排序并将
d.items()传递给它。
标签: python