Python:按日期排序嵌套字典

1 投票
3 回答
894 浏览
提问于 2025-05-01 05:43

我有一个很大的字典,概念上类似于这个:

data = {'business1': {'1/2':20, '1/4':10, '1/3':30}, 'business2': {'1/2':10, '1/4':20, '1/3':30}}

我想按日期对里面的嵌套字典进行排序。当没有嵌套的时候,我知道怎么做,如下所示。我创建了一个列表,把键值对添加到列表中,然后进行排序。

data = {'1/2':20, '1/4':10, '1/3':30}

sorted_data = []
for key,value in data.iteritems():
    temp = (key,value)
    sorted_data.append(temp)
sorted_data.sort(key = lambda item: item[0], reverse=False)
print sorted_data

问题是,当字典里面还有字典的时候,我该怎么做,就像我最开始提到的那样:

data = {'business1': {'1/2':20, '1/4':10, '1/3':30}, 'business2': {'1/2':10, '1/4':20, '1/3':30}}
暂无标签

3 个回答

0

在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期工作。这种情况下,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。

在这些论坛上,很多人会分享他们的经验和解决方案。你可以看到其他人遇到的类似问题,以及他们是如何解决的。这不仅能帮助你找到答案,还能让你学到更多的知识。

总之,遇到问题时,不要害怕去问别人,很多人都愿意提供帮助,尤其是在编程这个领域。记得多看看别人的经验,这样你会变得越来越厉害!

>>> data = {'business1': {'1/2':20, '1/4':10, '1/3':30}, 'business2': {'1/2':10, '1/4':20, '1/3':30}}
>>> {i:sorted(data[i].items(), key=lambda x: x[0]) for i in data}
{'business2': [('1/2', 10), ('1/3', 30), ('1/4', 20)], 'business1': [('1/2', 20), ('1/3', 30), ('1/4', 10)]}
1
from collections import OrderedDict

for k,v in data.items():
    data[k] = OrderedDict(sorted(v.items()))

print data

用户输入:

 data = {'business1': {'1/2':20, '1/4':10, '1/3':30}, 'business2': {'1/2':10, '1/4':20, '1/3':30}}

输出:

 {'business2': OrderedDict([('1/2', 10), ('1/3', 30), ('1/4', 20)]), 'business1': OrderedDict([('1/2', 20), ('1/3', 30), ('1/4', 10)])}
0

你没有说明你想要的结果是什么样的,但我猜你希望它们看起来像这样:

result = {'business1': [('1/2',20), ('1/3',30), ('1/4',10)],
          'business2': [('1/2',10), ('1/3',30), ('1/4',20)]}

这是我会怎么做:

result = {}
for business_name, business_data in data.iteritems():
    # The following is basically your single-data loop
    sorted_data = []
    for key,value in business_data.iteritems():
        temp = (key,value)
        sorted_data.append(temp)
    sorted_data.sort(key = lambda item: item[0], reverse=False)
    result[business_name] = sorted_data

现在,你可以省去一步。for key,value in business_data.iteritems(): 这个循环其实是在重复 dict.items() 的功能。所以你可以用 sorted_data = list(business_data.items()) 来替代四行代码。(在Python 2中,list() 这个调用其实不是必须的,但也没什么坏处,而在Python 3中则是需要的。因为你没有说明你用的是哪个版本,所以我保留了这个调用,这样我的答案在Python 2和Python 3上都能用)。

所以我建议的最终版本是:

result = {}
for business_name, business_data in data.iteritems():
    sorted_data = list(business_data.items())
    sorted_data.sort(key = lambda item: item[0], reverse=False)
    result[business_name] = sorted_data

希望这对你有帮助。

撰写回答