习题
1.空字典的代码是怎样的?
答:两个花括号:{}
2.一个字典包含键’fow’和值42,看起来是怎样的?
答:{‘fow’:42}
3.字典和列表的主要区别是什么?
答:字典中的表项是不排序的,不能像列表那样切片,可以用任意值作为键
4.如果spam 是{‘bar’: 100},你试图访问spam[‘foo’],会发生什么?
答:尝试访问字典中不存在的键,将导致KeyError 出错信息
5.如果一个字典保存在spam 中,表达式’cat’ in spam 和’cat’ in spam.keys()之间的区别是什么?
答:没有区别,‘cat’ in spam 是’cat’ in spam.keys()的简写版本,检查’cat’键是否存在于字典中
6.如果一个字典保存在变量中,表达式’cat’ in spam 和’cat’ in spam.values()之间的区别是什么?
答:6.‘cat’ in spam 检查字典中是不是有一个’cat’ 键,而’cat’ in spam.values() 检查是否有一个值’cat’ 对应于 spam 中的某个键。
7.下面代码的简洁写法是什么?
if ‘color’ not in spam:
spam[‘color’] = ‘black’
答:spam.setdefault(‘color’,‘black’)
8.什么模块和函数可以用于“漂亮打印”字典值?
答:pprint模块,pprint()和pformat()函数
实践项目
1.好玩游戏的物品清单
写一个名为displayInventory()的函数,它接受任何可能的物品清单,并显示如下:
Inventory:
12 arrow
42 gold coin
1 rope
6 torch
1 dagger
Total number of items: 62
答:
stuff={'rope': 1, 'torch': 6, 'gold coin': 42, 'dagger': 1, 'arrow': 12}
def displayInventory(inventory):
print("Inventory:")
count=0
for k,v in inventory.items():
print(str(v)+" "+k)
count+=v
print("Total number of items:"+str(count))
displayInventory(stuff)
2.列表到字典的函数,针对好玩游戏物品清单
假设征服一条龙的战利品表示为这样的字符串列表:
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
写一个名为addToInventory(inventory, addedItems)的函数,其中inventory 参数是一个字典,表示玩家的物品清单(像前面项目一样),addedItems 参数是一个列表,就像dragonLoot。
addToInventory()函数应该返回一个字典,表示更新过的物品清单。请注意,列表可以包含多个同样的项。你的代码看起来可能像这样:
def addToInventory(inventory, addedItems):
#your code goes here
inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
displayInventory(inv)
前面的程序(加上前一个项目中的displayInventory()函数)将输出如下:
Inventory:
45 gold coin
1 rope
1 ruby
1 dagger
Total number of items: 48
答:
第一种:
def displayInventory(inventory):
print("Inventory:")
count=0
for k,v in inventory.items():
print(str(v)+" "+k)
count+=v
print("Total number of items:"+str(count))
def addToInventory(inventory, addedItems):
for i in range(len(addedItems)):
if addedItems[i] not in inventory:
inventory.setdefault(addedItems[i],1)
else:
inventory[addedItems[i]]+=1
return inventory
inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
displayInventory(inv)
第二种:
def displayInventory(inventory):
print("Inventory:")
count=0
for k,v in inventory.items():
print(str(v)+" "+k)
count+=v
print("Total number of items:"+str(count))
def addToInventory(inventory, addedItems):
for i in addedItems:
if i in inventory:
inventory[i]+=1
else:
inventory[i]=1
return inventory
inv = {'gold coin': 42, 'rope': 1}
dragonLoot = ['gold coin', 'dagger', 'gold coin', 'gold coin', 'ruby']
inv = addToInventory(inv, dragonLoot)
displayInventory(inv)