字典数据类型
>>> mycat = {'size':'fat','color':'gray','disposition':'loud'}
>>> mycat
{'size': 'fat', 'color': 'gray', 'disposition': 'loud'}
>>> mycat['size']
'fat'
>>> spam = {123:'hello',456:'word'}
>>> spam
{123: 'hello', 456: 'word'}
>>> spam[123]
'hello'
字典与列表
字典的相等不考虑元素的位置,而列表必须位置一致
>>> spam = {123:'hello',456:'word'}
>>> spam1 = {456:'word',123:'hello'}
>>> spam == spam1
True
>>> spam = [1,2,3]
>>> spam1 = [3,2,1]
>>> spam == spam1
False
字典的动态查询与添加
birthdays = {}
while True:
name = input()
if name == '':
break
if name in birthdays:
print(birthdays[name] + ' is the birthday of '+name)
else:
print('I do not have birthday information of '+name)
print('what is their birthday')
body = input()
birthdays[name] = body
print('Birthday database updated.')
for i in birthdays:
print(i +' 的生日在 '+birthdays[i])
print(birthdays)
---------------------------------------------------------
==========RESTART: D:/python/字典题.py ============
Tom
I do not have birthday information of Tom
what is their birthday
Dec 12
Birthday database updated.
Tom
Dec 12 is the birthday of Tom
Lili
I do not have birthday information of Lili
what is their birthday
Mar 4
Birthday database updated.
Alice
I do not have birthday information of Alice
what is their birthday
Apr 1
Birthday database updated.
Lili
Mar 4 is the birthday of Lili
Tom 的生日在 Dec 12
Lili 的生日在 Mar 4
Alice 的生日在 Apr 1
{'Tom': 'Dec 12', 'Lili': 'Mar 4', 'Alice': 'Apr 1'}
keys()、values()和items()方法
>>> spam ={'color': 'red', 'age': '42'}
>>> for i in spam:
print('key = '+ i +',value= '+spam[i])
key = color,value= red
key = age,value= 42
直接写i in spam
固然简单,但当遇到value的字符类型不一样的时候,就会报错
>>> spam = {'color': 'red', 'age': 42}
>>> for i in spam.keys():
print(i)
color
age
使用spam.keys()
便可以遍历字典中的key
>>> for i in spam.values():
print(i)
red
42
同理,在使用了spam.value()
便可以遍历字典中的value
>>> for i in spam.items()
SyntaxError: invalid syntax
>>> for i in spam.items():
print(i)
('color', 'red')
('age', 42)
在spam.items()
比较特殊,他遍历出来的是(key,value)
>>> spam
{'color': 'red', 'age': 42}
>>> spam.keys()
dict_keys(['color', 'age'])
>>> list(spam.keys())
['color', 'age']
检查字典中是否存在键或值
>>> spam
{'color': 'red', 'age': 42}
>>> 'name' in spam.keys()
False
>>> 'color' in spam.keys()
True
>>> 'red' in spam.values()
True
get()方法
#使用get()
>>> temp = {'apple':5,'cups':4}
>>> 'I am bringing ' + str(temp.get('apple',0)) + ' apple'
'I am bringing 5 apple'
>>> 'I am bringing ' + str(temp.get('eggs',0)) + ' eggs'
'I am bringing 0 eggs'
>>> temp
{'apple': 5, 'cups': 4}
#get()不改变原来字典内容
#未使用get()
>>> 'I am bringing ' + str(temp['apple']) + ' apples'
'I am bringing 5 apples'
>>> 'I am bringing ' + str(temp['eggs']) + ' eggs'
Traceback (most recent call last):
File "<pyshell#55>", line 1, in <module>
'I am bringing ' + str(temp['eggs']) + ' eggs'
KeyError: 'eggs'
setdefault()方法
在字典中为某个键值设置一个默认值,当该键没有任何值使用时,默认值生效
>>> spam
{'color': 'red', 'age': 42}
>>> spam.setdefault('name','Tom')
'Tom'
>>> spam
{'color': 'red', 'age': 42, 'name': 'Tom'}
>>> spam.setdefault('name','Joy')
'Tom'
>>> spam['name'] = 'Lili'
>>> spam
{'color': 'red', 'age': 42, 'name': 'Lili'}
漂亮打印——setdefault()的具体使用
import pprint
temp = 'Yes,I can do it.'
cout = {}
for i in temp:
cout.setdefault(i,0)
cout[i] = cout[i]+1
pprint.pprint(cout)
RESTART: C:/Users/lxm123456/AppData/Local/Programs/Python/Python37/漂亮打印setdefault.py
{' ': 3,
',': 1,
'.': 1,
'I': 1,
'Y': 1,
'a': 1,
'c': 1,
'd': 1,
'e': 1,
'i': 1,
'n': 1,
'o': 1,
's': 1,
't': 1}
使用数据结构对真实世界建模
井字棋盘
= RESTART: 井字棋盘.py =
tboard = {'T-L':' ','T-C':' ','T-R':' ',
'M-L':' ','M-C':' ','M-R':' ',
'B-L':' ','B-C':' ','B-R':' '}
'''
tboard = {}
for a in ['T','M','B']:
for b in ['L','C','R']:
tboard.setdefault(a+'-'+b,' ')
'''
def func(board):
print(board['T-L'] +'|'+ board['T-C'] + '|' +board['T-R'])
print(board['M-L'] +'|'+ board['M-C'] + '|' +board['M-R'])
print(board['B-L'] +'|'+ board['B-C'] + '|' +board['B-R'])
turn = 'X'
for i in range(9):
func(tboard)
print('请 '+turn+ ' 选定位置')
temp = input()
tboard[temp] = turn
if turn == 'X':
turn = 'O'
else:
turn = 'X'
嵌套字典和列表
all = {'Tom':{'Apple':4,'eggs':3},
'Lili':{'moodles':2,'Apple':2},
'Joy':{'Rice':3,'cups':2}
}
def totalBrought(temp,item):#指定查询
num = 0
for v in temp.values():
num = num + v.get(item,0)
return num
def func(temp): #全部查询
for v in temp.values():
for a in v.keys():
t.setdefault(a,0)
t[a] = t[a] + v[a]
t = {}
func(all)
for k,v in t.items():
print('统一查询:'+k+' = ' + str(v))
print()
print('指定查询:Apple = ' + str(totalBrought(all,'Apple')))
= RESTART: 食物总数.py =
统一查询:Apple = 6
统一查询:eggs = 3
统一查询:moodles = 2
统一查询:Rice = 3
统一查询:cups = 2
指定查询:Apple = 6