【问题标题】:How to sort by value in descending order an Ordered Dictionary in python?python - 如何按值按降序排序python中的有序字典?
【发布时间】:2017-08-06 19:12:45
【问题描述】:

我正在使用包含所有值的有序字典(来自 OOB 估计的 n_estimators 和错误率,as shown here

我想首先在字典中获取错误率最低的值。

例如,您可以在下面看到 222 的错误率最高。

OrderedDict([('RandomForest_AWA_Fp1, max_features=7', 
    [(220, 0.10833333333333328), 
     (221, 0.10833333333333328), 
     (222, 0.10952380952380958), 
     (223, 0.10833333333333328)])
])

我想按以下顺序对字典进行排序:220、221、223、222(按值降序排列)

我试过了:

OrderedDict(sorted(error_rate.items(), key=lambda t: min(t[0]))) 

但我看不出有什么不同。

我得到的错误:

 File "<ipython-input-85-0592e683c6a9>", line 3
    pp(dict(OrderedDict(sorted([(k, sorted(v, key=min)) for k, v in d.items()], key=lambda(k, v): min(v)))))
                                                                                      ^
SyntaxError: invalid syntax

【问题讨论】:

  • 您能否通过一个清晰简单的示例(例如 3 项)来阐明输入和预期输出的样子?
  • 您是否尝试按值排序?如果是这样,请检查:Sort a Python dictionary by value

标签: python scikit-learn


【解决方案1】:

您的字典由一项组成,所以我不确定您是否也想对它进行排序。但是,您的链接问题似乎就是这种情况。

由于您提到222 具有最高的错误值,我认为您还想对列表中的值进行排序。

>>> from pprint import pprint as pp
>>> d = OrderedDict([('RandomForest_AWA_Fp1, max_features=7', [(220, 0.10833333333333328), (221, 0.10833333333333328), (222, 0.10952380952380958), (223, 0.10833333333333328)])])
>>> pp(OrderedDict(sorted([(k, sorted(v, key=min)) for k, v in d.items()], key=lambda(k, v): min(v))))
OrderedDict([('RandomForest_AWA_Fp1, max_features=7', [(220, 0.10833333333333328), (221, 0.10833333333333328), (223, 0.10833333333333328), (222, 0.10952380952380958)])]{'RandomForest_AWA_Fp1, max_features=7': [(220, 0.10833333333333328),
                                                  (221, 0.10833333333333328),
                                                  (223, 0.10833333333333328),
                                                  (222, 0.10952380952380958)]}

【讨论】:

  • 我收到一个错误文件“”,第 3 行 pp(dict(OrderedDict(sorted([(k, sorted(v, key=min)) for k) , v in d.items()], key=lambda(k, v): min(v))))) ^ SyntaxError: invalid syntax
  • @Aizzaac 在这里工作得很好!你能检查一下你是否错过了复制/粘贴之间的大括号吗?
猜你喜欢
  • 2021-05-01
  • 1970-01-01
  • 2016-01-01
  • 2019-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
相关资源
最近更新 更多