Python自学3(字典)
1.像列表一样,“字典”是许多值的集合,但是不像列表的下标,字典的索引可以使用许多不同数据类型,不只是整数。字典的索引被称为“键”,键及其关联的值称为“键-值”对
2.字典中的表项是不排序的,不能像列表一样进行切片。
3.尝试访问字典中不存在的键,将导致KeyError出错信息
4.尽管字典时不排序的,但可以用任意值作为键,用强大的方式来组织数据。
5.用in关键字,可以看看输入的名字是否作为键存在于字典中,就像查看列表中。如果该名字在字典中,你就可以用方括号访问关联的值。如果不在,你就可以用同样的方括号语法和赋值操作符添加它
6.有三个字典方法,它们将返回类似列表的值
key():返回字典的键,返回类型dict_keys
spam={'color':'red','age':'20'}
for i in spam.keys():
print(i)
color
age
values():返回字典的值,返回类型dict_values
spam={'color':'red','age':'20'}
for i in spam.values():
print(i)
red
20
items():返回字典的键-值对,返回类型dict_items
spam={'color':'red','age':'20'}
for i in spam.items():
print(i)
('color', 'red')
('age', '20')
7.如果希望通过这些方法得到一个真正的列表,就把类似列表的返回值传递给list函数
spam={'color':'red','age':'20'}
print(list(spam.keys()))
['color', 'age']
8.in和not in操作符可以检查某个键或者值是否在字典中。例如'color' in spam.keys()
9.get()方法:它有两个参数,要去的其值的键,以及如果该键不存在时,返回的备用值。
>>> pic = {'apple':4, 'banana':6}
>>> 'buy '+str(pic.get('apple',0))+' apples'
'buy 4 apples'
>>> 'buy '+str(pic.get('eggs',2))+' eggs'
'buy 2 eggs
10.setdefault()方法:传递给该方法的第一个参数,是要检查的键;第二个参数,是如果该键不存在时要设置的值。如果该键确实存在,方法就会返回键的值。
setdefault()是一个很好的快捷方式,可以确保一个键存在。
例子:统计字符串中每个字符出现的次数
message = 'sifu aidfu kafi oahfoihalifh.asd,asf'
count = {}
for i in message:
count.setdefault(i,0)
count[i]=count[i]+1
print(count)
结果:
{'s': 3, 'i': 5, 'f': 6, 'u': 2, ' ': 3, 'a': 6, 'd': 2, 'k': 1, 'o': 2, 'h': 3, 'l': 1, '.': 1, ',': 1}
11.漂亮打印
pprint模块中包含pprint()和pformat()函数。如果想要字典中表项的显示比print()的输出结果干净漂亮,就有用了。
import pprint
message = 'sifu aidfu kafi oahfoihalifh.asd,asf'
count = {}
for i in message:
count.setdefault(i,0)
count[i]=count[i]+1
pprint.pprint(count)
结果:
{' ': 3,
',': 1,
'.': 1,
'a': 6,
'd': 2,
'f': 6,
'h': 3,
'i': 5,
'k': 1,
'l': 1,
'o': 2,
's': 3,
'u': 2}
1)如果字典本身包含嵌套的列表或者字典,pprint.pprint()函数就特别有用
2)如果希望得到漂亮打印的文本作为字符串,而不是显示在屏幕上,那就调用pprint.pformat()
import pprint
message = 'sifu aidfu kafi oahfoihalifh.asd,asf'
count = {}
for i in message:
count.setdefault(i, 0)
count[i] = count[i] + 1
tmp = pprint.pformat(count)
print(tmp)
结果:
{' ': 3,
',': 1,
'.': 1,
'a': 6,
'd': 2,
'f': 6,
'h': 3,
'i': 5,
'k': 1,
'l': 1,
'o': 2,
's': 3,
'u': 2}
12.get() 函数返回指定键的值,如果值不在字典中返回默认值。spam.get(item,0)
13.统计物品清单,其中键是字符串,描述清单中的物品,值是一个整型值。
def disaplayInventory(spam):
stat = {}
for k, v in spam.items():
for m, n in v.items():
if m not in stat.keys():
stat[m]=n
else:
stat[m]=stat[m]+n
for i,j in stat.items():
print(str(j)+' '+str(i))
total = {'Alias': {'rope': 2, 'torch': 1}, 'Betty': {'gold': 3, 'arrow': 8},
'Cindy': {'torch': 3, 'dagger': 1, 'arrow': 5}}
disaplayInventory(total)
结果:
2 rope
4 torch
3 gold
13 arrow
1 dagger