python - 如何根据两个条件在嵌套字典中创建键列表?
问题描述
假设我们有一本字典:
m_dict = {'2011-04-01': {'asprin': (232, -7, -4, 1), 'glucose': (3, 4, -3)},
'2011-04-02': {'clb': (-7, -2, 8), 'humulin': (3, -6, -3), 'crack': (7,-5)},
'2011-04-03': {'otc': (-1, 34, -45), 'tussin': (-2, 8)} }
我试图根据日期持有的药物数量按降序对这本字典进行排序,但如果两个日期的药物数量相同,则按升序对这些日期进行排序。因此,这种情况下的列表应该是: ['2011-04-02', '2011-04-01', '2011-04-03']
。
我了解如何根据药物数量进行排序,但是如果药物数量相同,则对如何实现另一个排序条件感到困惑。
像这样的东西?我正在尝试使用理解组合在单个语句中做到这一点。但这不适用于规则:如果两个日期的药物数量相同,则将 date_lst 中的这两个日期按升序排序。
date_lst = [key for key in sorted(m_dict.keys(), key = lambda item[key]): len(item[key]))
解决方案
您可以按值的元组、字典元素的长度(取反以降序排序)和键对列表进行排序:
date_lst = [key for key in sorted(m_dict.keys(), key=lambda k: (-len(m_dict[k]), k))]
输出:
['2011-04-02', '2011-04-01', '2011-04-03']
请注意,在对 a 进行排序时,您可以只使用m_dict
而不是m_dict.keys()
因为sorted
对键进行操作dict
,而不是对值进行操作(因为这是dict
作为迭代器返回的内容)。因此,您可以简化为:
date_lst = [key for key in sorted(m_dict, key=lambda k: (-len(m_dict[k]), k))]
推荐阅读
- ios - popToRootViewControllerAnimated:总是返回 null
- cordova - 如何解决 Playstore 中的图片上传问题?
- java - 我从 Spring Boot 安全设置中收到“访问此资源需要完全身份验证”响应
- scala - Scala 类型声明中的 Hashmark -- `P#Backend#Database` 是什么意思?
- sql - 在 hive 中排序表值的问题
- symfony - Symfony WebProfiler 不显示
- python - from selenium.webdriver.common.keys import Keys 有什么用
- python - 根据另一个嵌套列表对嵌套列表进行排序
- javascript - 使用jquery验证手机号码验证无法正常工作
- virtualbox - Virtualbox:如何在 Ubuntu 上的 Windows10 来宾上安装来宾添加?