首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据两个条件创建嵌套字典中的键列表?

如何根据两个条件创建嵌套字典中的键列表?
EN

Stack Overflow用户
提问于 2020-04-07 10:53:21
回答 3查看 81关注 0票数 2

假设我们有一本字典:

代码语言:javascript
运行
复制
 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中按升序对这两个日期进行排序。

代码语言:javascript
运行
复制
date_lst = [key for key in sorted(m_dict.keys(), key = lambda item[key]): len(item[key]))
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-07 11:06:41

您可以按值的元组、字典元素的长度(取反以降序排序)和键对列表进行排序:

代码语言:javascript
运行
复制
date_lst = [key for key in sorted(m_dict.keys(), key=lambda k: (-len(m_dict[k]), k))]

输出:

代码语言:javascript
运行
复制
['2011-04-02', '2011-04-01', '2011-04-03']

请注意,您可以只使用m_dict而不是m_dict.keys(),因为sorted在对dict排序时对键进行操作,而不是值(因为这是dict作为迭代器返回的内容)。因此,您可以简化为:

代码语言:javascript
运行
复制
date_lst = [key for key in sorted(m_dict, key=lambda k: (-len(m_dict[k]), k))]
票数 5
EN

Stack Overflow用户

发布于 2020-04-07 11:07:00

试试这段代码。

代码语言:javascript
运行
复制
sorted_key_list = sorted(m_dict.keys(), key = lambda t:len(m_dict[t].items()))

如果您想创建带订单的字典,请使用collections.OrderDict,如下所示。

代码语言:javascript
运行
复制
from collections import OrderedDict
sorted_dic = OrderedDict()
for key in sorted_key_list:
    sorted_dic[key] = m_dict[key]
票数 0
EN

Stack Overflow用户

发布于 2020-04-08 14:05:19

我已经回答了,只需加上itemgetter操作符选项:

代码语言:javascript
运行
复制
from operator import itemgetter

sorted([(key,len(value))[0] 
        for key,value in m_dict.items()]
       ,key=itemgetter(1),reverse=True)


['2011-04-01', '2011-04-02', '2011-04-03']
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61072085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档