【问题标题】:Python get remaining runoff votingPython获得剩余的决选投票
【发布时间】:2015-01-29 20:24:42
【问题描述】:

我有点坚持为项目编写函数。这个函数接受一个候选人字典,他们的值是他们收到的票数。然后我必须返回一个包含剩余候选者的集合。换句话说,得票最少的候选人不应该在返回的集合中,例如,如果所有候选人的票数相同,则该集合应该是空的。我无法从这里开始。 例如,我知道我可以像这样对字典进行排序:

x = min(canadites, key=canadites.__getitem__)

但如果候选人具有相同的价值,这将不起作用,因为它只会弹出字典中的最后一个。

有什么想法吗?

更新:为了清楚起见。

假设我有以下字典:

canadites = {'X':22,'Y':1, 'Z':0}

理想情况下,函数应该返回一个只包含 X 和 Y 的集合。但是如果 Y 和 Z 都为 1

x = min(canadites, key=canadites.__getitem__)

似乎只返回 Z

【问题讨论】:

  • 添加例子,让你的问题更清晰
  • 问题出在哪里?如果要从字典中删除键,可以使用del dictionary[key]dict.pop(key)。阅读here

标签: python dictionary


【解决方案1】:

创建一个新字典而不是从旧字典中弹出项目更简洁:

>>> d = {'a':1, 'b':2, 'c':1, 'd':3}
>>> min_val = min(d.values())
>>> {k:v for k,v in d.items() if v > min_val}
{'b': 2, 'd': 3}

在 python2 中,itervaluesiteritems 会更有效,尽管在大多数情况下这是一个微优化。

【讨论】:

  • 正是我要找的东西,我是新来的理解,你能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多