假设我们有一本字典:
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']
请注意,自 sorted
起,您可以只使用 m_dict
而不是 m_dict.keys()
对 dict
进行排序时对键进行操作,而不是对值进行操作(因为这是 dict
作为迭代器返回的值)。所以你可以简化为:
date_lst = [key for key in sorted(m_dict, key=lambda k: (-len(m_dict[k]), k))]
关于python - 如何根据两个条件在嵌套字典中创建键列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61072085/