【问题标题】:Issue sorting a multi-dimensional dictionary that has non-numeric indices in Python在 Python 中对具有非数字索引的多维字典进行排序
【发布时间】:2012-06-10 17:24:52
【问题描述】:

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

#! /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'])

这是脚本的结果

# Results:
# key         buyValue
# 12773   799.98
# 24513   890.00
# 2801    518.94
# 12608   523.20
# 24486   425.00

# Expected:
# key         buyValue
# 24513   890
# 12773   799.98
# 12608   523.2
# 2801     518.94
# 24486   425

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

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

如果重要的话,我使用的是 python 版本 2.6.7。

【问题讨论】:

  • 您的表头显示“BuyValue”,而您正在打印“Sell value”。你确定要这样做吗?
  • 呃,感谢您发现我的错字。那确实修复了我的示例脚本。但是有一个逻辑错误没有出现在示例脚本中。我真正的脚本实际上是重新填充字典,当我循环遍历它时,它是乱序的。当然,字典没有顺序,所以输出错误。谢谢大家的帮助!

标签: python sorting dictionary


【解决方案1】:

正如我在问题下方的评论中所说,您的表格标题显示“BuyValue”并且您正在打印“Sell value”。按照你所期望的输出,我认为你在设置排序功能时犯了一个小错误。

应该是:

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

而不是

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

【讨论】:

  • 我将把它标记为已接受,因为它是第一个,你的新眼睛在我的示例脚本中发现了错误。我想写出问题有助于我在“真实”脚本中识别问题,正如我在对该问题的评论中所描述的那样。谢谢!
【解决方案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'])
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 2023-04-05
    • 1970-01-01
    • 2017-09-22
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多