像列表一样,“字典”是许多值的集合。但不像列表的下标, 字典的索引可以使用许多不同数据类型, 不只是整数。 字典的索引被称为“键”,键及其关联的值称为“键-值”对。
>>> myDog={'size':'big','color':'gray','desc':'dog'}
>>> myDog['size']
'big'
>>> myDog[1]
Traceback (most recent call last):
File "", line 1, in myDog[1]
KeyError: 1
>>> myDog[1]='abc'
>>> myDog
{'size': 'big', 'color': 'gray', 'desc': 'dog', 1: 'abc'}
>>> myDog[True]='good'## 在字典中 True 和 1 是同一 key
>>> myDog
{'size': 'big', 'color': 'gray', 'desc': 'dog', 1: 'good'}
>>> myDog[False]='bad'
>>> myDog
{'size': 'big', 'color': 'gray', 'desc': 'dog', 1: 'good', False: 'bad'}
>>> myDog[0]='www'## 在字典中 False 和 0 是同一 key
>>> myDog
{'size': 'big', 'color': 'gray', 'desc': 'dog', 1: 'good', False: 'www'}
字典与列表
列表中项是有序的,字典中的表项是不排序的。名为 spam 的列表中,第一个表项是 spam[0]。但字典中没有“第一个”表项。两个列表是否相同表项的顺序很重要,但在字典中,键-值对输入的顺序并不重要。
>>> spam=['a','b','c']
>>> bacon=['c','b','a']
>>> spam==bacon
False
>>> spam={1:'a',2:'b',3:'c'}
>>> bacon={3:'c',1:'a',2:'b'}
>>> spam==bacon
True
example:
def birs():
birthdays={'Tom':'10.1','Joe':'5.12','Mark':'8.3'}
while True:
print('请输入姓名')
name=input()
if name=='':
break
if name in birthdays:
print(name+'的生日是'+birthdays[name])
else:
print('没有找到'+name+'生日信息')
print('请输入'+name+'的生日')
birthday=input()
birthdays[name]=birthday
print(name+'的生日信息已录入')
birs()
请输入姓名
Tom
Tom的生日是10.1
请输入姓名
Veau
没有找到Veau生日信息
请输入Veau的生日
2.1
Veau的生日信息已录入
请输入姓名
Joe
Joe的生日是5.12
请输入姓名
Veau
Veau的生日是2.1
请输入姓名
keys()、 values()和 items()方法
利用 keys()、 values()和 items()方法,循环分别可以迭代键、值或键-值对(元组)。
>>> spam
{1: 'a', 2: 'b', 3: 'c'}
>>> for i in spam.keys():
print(i)
1
2
3
>>> for v in spam.values():
print(v)
a
b
c
>>> for k,v in spam.items():
print(str(k)+' - '+v)
1 - a
2 - b
3 - c
>>> for n in spam.items():
print(n)
(1, 'a')
(2, 'b')
(3, 'c')
in 和 not in 操作符可以检查值是否存在于列表中。也可以利用这些操作符,检查某个键或值是否存在于字典中。
>>> mydog={'size':'big','color':'gray','desc':'dog'}
>>> 'size' in mydog
True
>>> 'name' in mydog
False
>>> 'color' in mydog
True
>>> 'color' in mydog.keys()
True
>>> 'dog' in mydog.values()
True
>>> 'name' not in mydog.items()
True
get()方法
字典 get()方法,它有两个参数:要取得其值的键,以及如果该键不存在时,返回的备用值。
>>> mydog
{'size': 'big', 'color': 'gray', 'desc': 'dog'}
>>> mydog['name']
Traceback (most recent call last):
File "", line 1, in mydog['name']
KeyError: 'name'
>>> mydog.get('name','w')
'w'
>>> mydog.get('size')
'big'
>>> mydog.get('color','red')
'gray'
setdefault()方法
为字典中某个键设置一个默认值,当该键没有任何值时使用它。
>>> mydog
{'size': 'big', 'color': 'gray', 'desc': 'dog'}
>>> mydog.setdefault('name','w')
'w'
>>> mydog
{'size': 'big', 'color': 'gray', 'desc': 'dog', 'name': 'w'}
>>> mydog.setdefault('name','mm')
'w'
>>> mydog
{'size': 'big', 'color': 'gray', 'desc': 'dog', 'name': 'w'}
## 统计每个字符各有多少个
##import pprint格式化打印,可对结果排序
def characterCount(message):
count={}
for s in message:
count.setdefault(s,0)
count[s]+=1
print(count)
##pprint.pprint(count)
message='啊,我爱我的祖国 - my name is tome'
characterCount(message)
{'啊': 1, ',': 1, '我': 2, '爱': 1, '的': 1, '祖': 1, '国': 1, ' ': 5, '-': 1, 'm': 3, 'y': 1, 'n': 1, 'a': 1, 'e': 2, 'i': 1, 's': 1, 't': 1, 'o': 1}
嵌套的字典和列表
def countMon():
users={
'Tone':{'1元':3,'5角':2,'1角':6},
'Joe':{'1元':2,'5角':6,'1角':9},
'Maruy':{'1元':5,'5角':3,'1角':8},
'Ken':{'1元':3,'5角':5,'1角':12}
}
count={}
for item in users.values():
for k,v in item.items():
count.setdefault(k,0)
count[k]+=v
print(count)
countMon()
{'1元': 13, '5角': 16, '1角': 35}