【发布时间】:2012-02-03 04:50:34
【问题描述】:
我正在使用看起来像这样的 list 的 dict 对象(对象的顺序不同):
[
{'name': 'Foo', 'score': 1},
{'name': 'Bar', 'score': 2},
{'name': 'Foo', 'score': 3},
{'name': 'Bar', 'score': 3},
{'name': 'Foo', 'score': 2},
{'name': 'Baz', 'score': 2},
{'name': 'Baz', 'score': 1},
{'name': 'Bar', 'score': 1}
]
我想要做的是删除重复的名称,只保留每个名称中具有最高 'score' 的名称。上述列表的结果将是:
[
{'name': 'Baz', 'score': 2},
{'name': 'Foo', 'score': 3},
{'name': 'Bar', 'score': 3}
]
我不确定在这里使用哪种模式(除了一个看似愚蠢的循环,它不断检查当前dict 的'name' 是否已经在列表中,然后检查它的'score' 是否高于现有的'score'。
【问题讨论】:
-
跟着循环走,简单明了。
-
当您需要“稍微”更改时,它简单明了,六个月后易于阅读
-
+1 这个问题有点神奇,因为它引出了一组多样且有趣的答案。令人着迷的是,这个问题有多少完全不同的解决方案。由于答案集丰富,我将其列为最爱(我也赞成每个具有创造性或有趣解决方案的答案)。
-
@Raymond - 谢谢。我也很高兴看到品种繁多。我有几个版本,但从列表中收集了一个更干净的版本。顺便说一句,我拥有并读过你的书(高级 Python,以防你有其他书),它很棒。我个人认为你应该再写一本书,也许是关于更高级的 Python 或 Python 中的设计模式。
标签: python algorithm list sorting