【问题标题】:python3 sort a list of dictionaries by an attribute of the dict valuespython3按字典值的属性对字典列表进行排序
【发布时间】:2018-09-20 06:57:35
【问题描述】:

我有一个存储在part_results 中的字典列表,如下所示:

[{'Pad': FAILED! 69% Pad in BF1, serf = 12.06 ≤ 17.4.}, 
 {'Pipe': FAILED! 196% Pipe in BF1, pmax = 205.38 ≤ f_pipe_ = 104.67 MPa.},
 {'Foot plate': FAILED! 89% Foot plate in BF1, serf = 34.90 ≤ 39.1.}]

dicts 的值是打印良好的对象(始终是单个对象),具有“利用率”属性;这些是打印中的百分比值。

我希望列表按利用率值排序,但我很难找出如何以 Python 方式访问每个 dict 的值。

输出将是

[{'Pipe': FAILED! 196% Pipe in BF1, pmax = 205.38 ≤ f_pipe_ = 104.67 MPa.},
 {'Foot plate': FAILED! 89% Foot plate in BF1, serf = 34.90 ≤ 39.1.},
 {'Pad': FAILED! 69% Pad in BF1, serf = 12.06 ≤ 17.4.}]

我的第一次尝试是这样的

sorted(part_results, key=lambda x: part_results)

这显然不是我想要的:它将按 dict 键排序。我知道,实现这一点不需要排序键,但是 lambda 是访问循环内字典的值所必需的 - 我该怎么做?

【问题讨论】:

  • 这不是一个有效的 Python dict 开始。您能否发布您想要排序的实际字典结构,包括utilisation 值?
  • @zwer 他可能只是printed 它并且他们的对象以这种方式实现__repr__...是的,@jake77 __repr__ 应该漂亮地打印任何东西.应该是__str__ 这样做...
  • ...但足以说明这一点,该对象有大约二十个属性。

标签: python python-3.x sorting dictionary


【解决方案1】:

鉴于每个dict 中始终存在一个键值对,您可以尝试:

sorted(part_results, key=lambda d: list(d.values())[0].utilisation)

这会根据字典列表的第一个(也是唯一一个)值的utilisation 属性对字典列表进行排序。

【讨论】:

  • part_results[x] 是一个字典,键是字符串,值是单个自定义对象
  • 几乎可以;在 python 3 中,.values() 不会通过 dict 视图返回列表,所以 sorted(part_results, key=lambda d: list(d.values())[0].utilisation)is OK
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 2010-11-15
  • 2019-01-25
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
相关资源
最近更新 更多