从python字典中提取

时间:2014-11-16 00:05:36

标签: python dictionary extract

让我们说我的字典如下:

class Airplane:

    def __init__(self, colour, Airplane_type): 
        self.colour = colour
        self.Airplane_type = Airplane_type

    def is_Airplane(self):
        return self.Airplane_type=="Jet"

    def is_orange(self):
          return self.colour=="orange"


class Position:

    def __init__(self, horizontal, vertical):
        self.horizontal = int(horizontal)
        self.vertical = int(vertical)





from airplane import Airplane
from position import Position

Class test():

    def __init__(self):

    self.landings:{Position(1,0) : Airplane("Jet", "orange"),
                   Position(3,0) : Airplane("Boeing", "blue"),}

如何提取所有橙色飞机并返回橙色飞机的数量。

3 个答案:

答案 0 :(得分:3)

这样做的一种优雅方式是列表理解:

oranges = [plane for plane in self.landings.itervalues()
           if plane.is_orange()]

正如M. K. Hunter所说,你可以在列表上调用len()来获取数字。

答案 1 :(得分:1)

此代码应该为您提供所需的结果:

result = []
keys = []
for key in self.landings:
    if self.landings[key].color == "orange":
        result.append(self.landings[key])
        keys.append(key)
#at the end of the loop, "result" has all the orange planes
#at the end of the loop, "keys" has all the keys of the orange planes
number=len(result) #len(result) gives the number of orange planes

请注意,len在许多情况下适用于列表或字典中的x数。

答案 2 :(得分:0)

如果你想找到橙色飞机的位置,你可能想迭代字典的items,这样你就可以测试飞机的颜色,同时看到位置:

orange_plane_positions = [pos for pos, plane in self.landings.values()
                              if plane.is_orange()]

如果你正在使用Python 2并且self.landings词典中有很多值,那么最好直接使用iteritems而不是items(后者总是最好的Python 3)。

请注意,如果此查询是您希望经常执行的操作,则使用其他字典组织可能会有意义。而不是按位置索引,按平面颜色索引,并将位置存储为Airplane实例的属性。