【发布时间】:2013-05-31 15:57:18
【问题描述】:
是否有一些简单的方法可以访问列表中的对象,而无需使用索引或遍历列表?
简而言之: 我正在从文本文件中读取行,拆分行,并从信息中创建对象。我不知道文本文件中会有什么信息。比如:
roomsfile.txt
0\卧室\一间带特大号床的卧室。\一扇通往东边的门。
1\厨房\现代化的钢制和镀铬厨房。\一扇通往西边的门。
2\familyRoom\一个带电视和沙发的巨大家庭房。\朝南的一扇门。
一些 Python 代码:
class Rooms:
def __init__(self, roomNum, roomName, roomDesc, roomExits):
self.roomNum = roomNum
self.roomName = roomName
self.roomDesc = roomDesc
self.roomExits = roomExits
def getRoomNum(self):
return self.roomNum
def getRoomName(self):
return self.roomName
def getRoomDesc(self):
return self.roomDesc
def getRoomExits(self):
return self.roomExits
def roomSetup():
roomsfile = "roomsfile.txt"
infile = open(roomsfile, 'r')
rooms = []
for line in infile:
rooms.append(makeRooms(line))
infile.close()
return rooms
def makeRooms(infoStr):
roomNum, roomName, roomDesc, roomExits = infoStr.split("\")
return Rooms(roomNum, roomName, roomDesc, roomExits)
当我想知道卧室有什么出口时,我必须使用类似下面的内容遍历列表(其中“名词”被用户传递为“卧室”):
def printRoomExits(rooms, noun):
numRooms = len(rooms)
for n in range(numRooms):
checkRoom = rooms[n].getRoomName()
if checkRoom == noun:
print(rooms[n].getRoomExits())
else:
pass
这可行,但感觉我错过了一些更简单的方法......特别是因为我有一块拼图(即在这种情况下是“卧室”)......特别是因为房间列表可能有数千个里面的对象。
我可以创建一个作业:
bedroom = makeRooms(0, bedroom, etc, etc)
然后做:
bedroom.getRoomExits()
但同样,我不知道文本文件中会包含什么信息,也不知道要分配什么。 This StackOverFlow answer 反对“动态创建的变量”,并赞成使用字典。我尝试了这种方法,但我找不到一种方法来访问我添加到字典中的命名对象的方法(以及信息)。
总之:我错过了什么愚蠢的东西吗?
提前致谢!很抱歉这篇文章太长了——我想提供足够的细节。
克里斯
【问题讨论】:
-
"...赞成使用字典。我尝试了这种方法,但我找不到访问我添加到字典中的命名对象的方法(以及信息)的方法。”在某种程度上,访问字典与访问列表相同。如果可以做list[0].doMethod(),也可以做dict["bedroom"].doMethod()。
-
如果它是一个排序列表,也就是说,所有房间都按字母顺序排列,那就更容易了。见this