【问题标题】:how get the object which has the minimum value in an orderedDict?如何获取orderedDict中具有最小值的对象?
【发布时间】:2019-02-08 23:49:34
【问题描述】:

我有一个对象的有序字典,

 [<f.Packet object at 0x07AD7090>, <f.Packet object at 0x07ACA8F0>, <f.Packet object at 0x07ACAC90>, <f.Packet object at 0x07A5F5D0>, <f.Packet object at 0x07ACA410>, <f.Packet object at 0x07ABBF50>, <f.Packet object at 0x07ACA830>]

这些对象中的每一个都具有名称、年龄和来源等属性。我怎样才能得到它的年龄最小的对象?

【问题讨论】:

  • 这是一个有序字典还是列表?代码显示列表。
  • @vinay: 类型是

标签: python object attributes ordereddict


【解决方案1】:

尝试一次,假设你有 d 作为 orderedDict

import operator
#...
person=sorted(d.values(), key=operator.attrgetter('age'))[0]
print person.age

【讨论】:

    【解决方案2】:

    根据你的需要,你可以使用简单的遍历:

    min(orderedDict.values(), key=lambda x: x.age)
    

    但是如果您需要 O(1) 的方式来执行此操作,则需要创建自己的类,因为 OrderedDict 仅根据插入顺序对项目进行排序。例如,您可以使用来自Sorted Containers 的 SortedDict(或自己编写)并执行以下操作(假设您仍然希望能够根据插入顺序获取项目):

    from collections import OrderedDict
    from sortedcontainers import SortedDict
    
    class MyOrderedDict(OrderedDict):
         def __init__(self):
                 super(MyOrderedDict, self).__init__(self)
                 self.sorted = SortedDict()
         def __setitem__(self, key, value):
                 super(MyOrderedDict, self).__setitem__(key, value)
                 self.sorted[value.age] = value
         def __delitem__(self, key):
                 age = super(MyOrderedDict, self).__getitem__(key).age
                 super(MyOrderedDict, self).__delitem__(key)
                 self.sorted.__delitem__(age)
         def ageIterator(self):
             for age in self.sorted:
                 yield (age, self.sorted[age])
    
    orderedDict = MyOrderedDict()
    #...
    
    for item in orderedDict:
        # Items in the order of insertions
    
    for age, item in orderedDict.ageIterator():
        # Items by age
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-20
      • 2012-10-31
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多