让我们说我的字典如下:
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"),}
如何提取所有橙色飞机并返回橙色飞机的数量。
答案 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
实例的属性。