删除字典中值不等于 Python 中最大值的项目



本质上,我想删除字典中每个值不等于最大值的键。

假设这是字典:

myDict = {"Bob": 1, "Bill": 5, "Barry": 4, "Steve": 5}

我可以按值排序:

myDict = sorted(myDict, key=myDict.get, reverse=True)

现在我想删除字典中任何不等于最大值的键(在本例中为'5')。以这样结束:

myDict = {"Bill": 5, "Steve": 5}

我试过使用这个for循环:

for item, v in myDict:
    if v < myDict[0]:
        del myDict[v]

但是我得到这个错误:

ValueError: too many values to unpack (expected 2)

这是a)我第一次在这里发帖,b)我只学了几个月的Python,所以如果我犯了一些愚蠢的错误,我很抱歉。

for item, v in myDict只给你keys mydict,然后你在item, v中收集密钥这就是为什么,

使用myDict.items()myDict.iteritems() .

for item, v in myDict.iteritems():
    if v < myDict[0]:
        del myDict[v]

获取myDict的最大值

max(myDict.values())

Dictdelete的键永远不要改变你正在迭代的迭代器,它会给你RuntimeError。因此,将其复制到另一个变量中,并按照Anand S Kumar的建议更改前一个变量

你不应该改变你正在迭代的对象,这通常会产生意想不到的结果(内部指针被移动,你在迭代中错过了元素等等)。您最好收集要删除的键,然后在单独的迭代中删除键:

keys = [k for k in myDict.keys() if myDict[k] == max(myDict.values())];
for k in keys: del myDict[k];

最好将max表达式也放在变量中,这样它就不会被多次求值。不确定Python是否能够为您优化(可能不会)。

您可以使用字典推导来创建一个新字典:

newDict = {k: v for k,v in myDict.items() if v == max(myDict.values())}

newDict输出:

{'Steve': 5, 'Bill': 5}

最新更新