我希望能够遍历游戏中的所有对象并检查他们的self.owner统计数据。
为此,我这样做:
for ship in game_map._all_ships():
....
我想创建一个字典,其中键作为玩家和船只的值列表:
dictionary { 'Player 0' :[ship 1, ship 2], 'Player 1': [ship 1] ... etc}
我可以用
检索他们的播放器ship.owner
但我不知道如何用列表初始化字典,而不知道有多少玩家,或者没有先运行循环就有多少艘船。
答案 0 :(得分:1)
试试这个:
# create an empty dictionary
mydictionary = {}
# loop through all ship objects
for ship in game_map._all_ships():
# check if there's not list yet for the ship owner
if ship.owner not in mydictionary:
# if no such list exists yet, create it with an empty list
mydictionary[ship.owner] = []
# with the ship owner name as key, extend the list with the new ship
mydictionary[ship.owner].append(ship)
答案 1 :(得分:1)
最顺畅的方法使用collections.defaultdict
以避免检查密钥:
from collections import defaultdict
dic = defaultdict(list)
for ship in game_map._all_ships():
dic[ship.owner].append(ship)
答案 2 :(得分:0)
这里需要的是defaultdict
,一个围绕dict
的包装类,它提供了所有基本字典功能,并允许创建空值键值对。
Pydoc将其定义为:
class collections.defaultdict([default_factory [,...]])
返回一个新的类字典对象。 defaultdict是内置字典的子类 类。它会覆盖一个方法并添加一个可写实例 变量。其余功能与dict相同 类,这里没有记录。
第一个参数提供default_factory的初始值 属性;它默认为None。所有剩余的参数都被处理 就像它们传递给dict构造函数一样,包括 关键字参数。
小示例代码:
>>> from collections import defaultdict
# create defaultdict containing values of `list` type
>>> d = defaultdict(list)
>>> d
=> defaultdict(<class 'list'>, {})
# assuming we need to add list `l` value to the dictionary with key 'l'
>>> l = [1,2,3]
>>> for ele in l:
d['l'].append(ele)
>>> d
=> defaultdict(<class 'list'>, {'l': [1, 2, 3]})