记录博客 ZH-BLOG

Python 字典数据类型

时间:2018-07-16 17:17:56分类:python 基础

像列表一样,“字典”是许多值的集合。但不像列表的下标, 字典的索引可以使用许多不同数据类型, 不只是整数。 字典的索引被称为“键”,键及其关联的值称为“键-值”对。

>>> 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}