在Python中对具有非数字索引的多维字典进行排序

2024-09-27 00:15:54 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个多维字典,它有一个数字键来标识一个内部字典,但是内部字典没有数字键。我很难根据内部字典的字符串索引之一的值创建一个排序键列表。我可能没有正确地描述该问题,因此下面是一个突出显示该问题的脚本示例:

#! /usr/bin/python
my_dict = {
        12608: {
                'market_data':  {
                    'sellVolume': 69210, 'buyValue': 296.20999999999998,  
                    'sellValue': 523.20000000000005, 'buyVolume': 9210899
                    }
            },
        24513: {
            'market_data': {
                'sellVolume': 42148, 'buyValue': 548.95000000000005,  
                 'sellValue': 890.0, 'buyVolume': 11213386
                }
            },
        12773:  {
                'market_data': {
                    'sellVolume': 383000, 'buyValue': 609.54999999999995, 
                    'sellValue': 799.98000000000002, 'buyVolume': 10285288
                    }
            },
        24486: {
            'market_data': {
                'sellVolume': 1314250, 'buyValue': 99.780000000000001,  
                'sellValue': 425.0, 'buyVolume': 14690060
                }
            },
        2801: {
            'market_data': {
                'sellVolume': 247577, 'buyValue': 348.98000000000002, 
                'sellValue': 518.94000000000005, 'buyVolume': 10325916
                }
            }
    }

d_sorted = sorted(my_dict, key=lambda \
       x: my_dict[x]['market_data']['buyValue'], reverse=True)

print "key\tbuyValue"
for key in d_sorted:
    print "%d\t%.2f" % (key, my_dict[key]['market_data']['sellValue'])

下面是脚本的结果

^{pr2}$

示例字典不是我的完整用例,而是一个精简版本来显示问题(例如,还有另一个内部字典对问题不重要)。我之所以提到这一点,是因为对于python来说,可能有一种比dictionary更好的数据类型。在

question here帮助我走到这一步,我看到的主要区别是我的第二维度不使用整数键。在

如果重要的话,我使用的是python2.6.7版本。在


Tags: key脚本示例data字典mymarketdict
2条回答

您按buyValue排序,然后打印sellValue,但将其称为buyValue,因此您需要在某个地方修复这种不一致性。在

以下是一些选项:

  • sellValue而不是buyValue排序,其余内容不变:

    d_sorted = sorted(my_dict, key=lambda \
           x: my_dict[x]['market_data']['sellValue'], reverse=True)
    
  • 打印buyValue,因为这是您当前排序的依据:

    print "key\tbuyValue"
    for key in d_sorted:
        print "%d\t%.2f" % (key, my_dict[key]['market_data']['buyValue'])
    

正如我在问题下面的评论中所说的,您的表头显示“BuyValue”,而您正在打印“Sell value”。根据你所期望的输出,我认为你只是在设置分拣机功能时犯了一个小错误。在

它应该是:

lambda x: my_dict[x]['market_data']['sellValue']

而不是

^{pr2}$

相关问题 更多 >

    热门问题