Python:以 Value 作为字典获取前 n 个键

2023-11-25

我有一本字典,比如:

data = {'sachin': {'score': 15000, 'out': 100},
        'Dhoni': {'score': 8000, out: 80},
        'Shewag': {'score': 12000, 'out': 150}}

我想要两名得分最高的球员。

所以我尝试过:key = (key for key,value in dd.items() if value['score'] > 'value').next()

绕到这里没有成功。

尝试使用链接:以元组为键的字典中具有最高值的前 n 个键

作为 Python 新手,无法绕过完美的解决方案。

有人可以分享一些关于这个的想法吗?

输出如下:

{'sachin':{'score':15000,'out':100},'Shewag':{'score':12000,'out':150}}

注意:应该是前n名玩家,例如我需要前两名,但可以在后期更改。


快速回答

排序工作:

>>> dict(sorted(data.items(), key=lambda x: x[1]['score'], reverse=True)[:2])
{'Shewag': {'out': 150, 'score': 12000},
 'sachin': {'out': 100, 'score': 15000}}

In Steps

您对项目进行排序:

>>> sorted(data.items())
[('Dhoni', {'out': 80, 'score': 8000}),
 ('Shewag', {'out': 150, 'score': 12000}),
 ('sachin', {'out': 100, 'score': 15000})]

这按名称的字母顺序排序。

Using a key函数定义为lambda排序依据score:

sorted(data.items(), key=lambda x: x[1]['score'])
[('Dhoni', {'out': 80, 'score': 8000}),
 ('Shewag', {'out': 150, 'score': 12000}),
 ('sachin', {'out': 100, 'score': 15000})]

Use reverse首先得到最大的一个:

sorted(data.items(), key=lambda x: x[1]['score'], reverse=True)
[('sachin', {'out': 100, 'score': 15000}),
 ('Shewag', {'out': 150, 'score': 12000}),
 ('Dhoni', {'out': 80, 'score': 8000})]

最后,仅采用切片的前两个项目,并将元组列表转换为字典dict:

>>> dict(sorted(data.items(), key=lambda x: x[1]['score'], reverse=True)[:2])
{'Shewag': {'out': 150, 'score': 12000},
 'sachin': {'out': 100, 'score': 15000}}

由于字典没有顺序,因此您只知道有两名得分最高的玩家。没有谁第一谁第二的概念。如果需要,您可以保留元组列表或转换为OrderedDict保留订单:

>>> from collections import OrderedDict
>>> OrderedDict(sorted(data.items(), key=lambda x: x[1]['score'], reverse=True)[:2])
OrderedDict([('sachin', {'out': 100, 'score': 15000}),
             ('Shewag', {'out': 150, 'score': 12000})])

正确地做

为了使其更具可重用性,您可以编写一个函数:

from collections import OrderedDict

def get_top_players(data, n=2, order=False):
    """Get top n players by score. 

    Returns a dictionary or an `OrderedDict` if `order` is true.
    """ 
    top = sorted(data.items(), key=lambda x: x[1]['score'], reverse=True)[:n]
    if order:
        return OrderedDict(top)
    return dict(top)

​

现在您可以仅将其与您的数据一起使用:

>>> get_top_players(data)
{'Shewag': {'out': 150, 'score': 12000},
 'sachin': {'out': 100, 'score': 15000}}

或设置不同数量的顶级玩家:

>>> get_top_players(data, n=3)
{'Dhoni': {'out': 80, 'score': 8000},
 'Shewag': {'out': 150, 'score': 12000},
 'sachin': {'out': 100, 'score': 15000}}

或按顺序排列它们:

>>> get_top_players(data, order=True)
OrderedDict([('sachin', {'out': 100, 'score': 15000}),
             ('Shewag', {'out': 150, 'score': 12000})])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:以 Value 作为字典获取前 n 个键 的相关文章

随机推荐

  • PHP 表单 + Google reCAPTCHA

    有点奇怪的是 谷歌的 recaptcha 文档并不像我想象的那么有用 我被要求采用当前现有的表单 每天都会收到几次垃圾邮件 并使用 Google 新的验证码进行更新 旧验证码的教程有很多 但新验证码的教程却不多 我基本上只是想要一个简单的表
  • 按钮背景资源对比

    button setBackgroundResource R Drawable abc if button getBackground getResources getDrawable R drawable abc button setBa
  • java.lang.Object 的受保护方法如何免受子类的影响?

    关键词protected授予对同一包中的类和子类的访问权限 http java sun com docs books tutorial java javaOO accesscontrol html 现在 每个班级都有java lang Ob
  • 限制闪亮字段中的输入类型

    事实上 numericInput接受字符串和数字输入 如果输入一个字符串 它将被转换为NA 尝试使用下面的代码 有没有办法不允许用户在闪亮的数字字段中键入字符串 ui lt fluidPage numericInput num label
  • C 中的内存池实现

    我正在寻找一个好的 C 内存池实现 它应包括以下内容 抗碎片化 超级快 能够在某个标识符下 捆绑 不同大小的多个分配 并删除具有给定标识符的所有分配 线程安全 我认为优秀的talloc 作为 samba 的一部分开发的可能正是您正在寻找的
  • Node.js 提示符“>”在 eshell 中无法显示

    我想在eshell中运行Node js 但提示不对 那么 我该如何解决这个问题呢 另一种方法是将其添加到您的 emacs 中 setenv NODE NO READLINE 1 这种方法的好处是它也适用于您直接运行的 Node 程序的其他调
  • jQuery detach() vs remove() vs hide() [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我在我的页面中使用高图表
  • -1 到 1 之间的随机数总和为 0 [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 用R 如何生成n随机数x 1 x n位于之间 1 and 1总和为0 推广到另一个总和和另一个范围怎么样 简单解决第一个问题 这是第一个问题的简单解决方案 模拟u 1 u n之间 1
  • Asp.Net MVC Core 启用双重转义

    我正在开发一个 asp net mvc 核心应用程序并尝试允许双重转义 我的编辑网址有一个电话号码作为超链接 例如 123 我知道如何使用普通的 ASP NET MVC 应用程序 我曾经将 web config 文件更改为
  • 创建类型的默认实例[重复]

    这个问题在这里已经有答案了 反射等价于 default object null 当我直到运行时才知道类型时 例如 public void Method Type type var instance type CreateDefault no
  • iPhone 使用 GData 框架将视频上传到 YouTube 应用

    我想将视频从我的应用上传到 YouTube 我正在使用 YoutubeTest 示例来实现此目的 我已经为我的应用程序设置了开发人员密钥和客户端 ID 现在 当尝试使用示例源代码上传视频时 它显示一个错误 2012 03 19 10 51
  • nd_pdo_mysql 和 pdo_mysql 扩展之间有什么区别?

    由于某种原因pdo mysql我们的托管服务器上的 PHP 扩展无法运行使用 MySQL 视图的查询 并出现此错误消息 SQLSTATE HY000 一般错误 1615 准备好的语句需要重新准备 有一个讨论Bug 42041 当 MySQL
  • app.UseErrorHandler() 可以访问错误详细信息吗?

    在我的 MVC4 应用程序中 我覆盖了 global asax csApplication Error object sender EventArgs e 我可以在哪里提取exception statusCode and requested
  • gcloud docker Push 403 禁止

    我正在尝试将 docker 映像推送到 eu gcr io 但收到 403 Forbidden gcloud docker push eu gcr io
  • Schema.org 中网页结构的隐含性

    在阅读了数千篇帖子 问题 博客文章和意见之后 我仍然对如何使用微数据标记网页感到有点困惑 如果微数据的主要目的是帮助搜索引擎更好地理解网页的内容 并且隐式假设网页 那么在 body 元素中从 itemtype Webpage 开始 然后继续
  • 模板类特化的模板方法

    这是我的代码 template
  • 泛型的 JSON 序列化

    我有一堂课 看起来像这样 public class MyData IList
  • Google Chrome 扩展程序的 Paypal 按钮

    我正在尝试向我的 google chrome 扩展添加一个捐赠按钮 因为我喜欢钱 我遇到了麻烦 因为 Chrome 扩展程序尝试在 popup html 窗口中打开 paypal 创建的捐赠按钮 当我单击该按钮时 我的扩展程序会重新启动 并
  • 不带逗号的 NumberFormat 文本字段

    我有一个JFormattedTextField我想接受 5 位数字范围内的数字 以下代码可以正确运行 myNumberBox new JFormattedTextField NumberFormat getIntegerInstance 但
  • Python:以 Value 作为字典获取前 n 个键

    我有一本字典 比如 data sachin score 15000 out 100 Dhoni score 8000 out 80 Shewag score 12000 out 150 我想要两名得分最高的球员 所以我尝试过 key key