字典介紹
字典使用{}表示,內部是一個個鍵值對,類似於java中的map,但是java中的map有泛型做約束,而python字典則沒有。字典的鍵必須是可hash的,像字符串和整形是可hash,但是如果使用列表或者字典作爲鍵則會報鍵不能hash異常,如下所示
listtest = ['ds','ds']
userInfo[listtest] = 'sds'
Traceback (most recent call last):
File "D:/pythonbase/dict/dicBase.py", line 19, in <module>
userInfo[listtest] = 'sds'
TypeError: unhashable type: 'list'
字典的鍵沒有強制要求類型必須一致,這在java中是不允許的,但是python中鍵類型可以不一致,如果在字典中使用不同類型的鍵,代碼不會報錯,但是一遍不會這樣做,而且不同類型的鍵在後續操作中容易出問題,所以最好不要使用不同類型的鍵。
# 不建議使用不同類型的鍵
userinfo = {}
userinfo[1] = 'hello'
userinfo['2'] = 'world'
print(userinfo)
輸出:
{1: 'hello', '2': 'world'}
在字典中使用不同類型的值比較常見,比如定義一個userInfo的字典用來表示用戶信息,其中鍵全是字符串類型,值有字符串類型,也有整形,還有字典類型和列表類型。
userInfo = {}
userInfo['name'] = 'Peter'
userInfo['id'] = 1121021
userInfo['detail'] = {'addr':'new york','age':12,'tel':'21232221021'}
userInfo['friend'] = ['Jane','Bob','Kate']
print(userInfo)
輸出:
{'name': 'Peter', 'id': 1121021, 'detail': {'addr': 'new york', 'age': 12, 'tel': '21232221021'}, 'friend': ['Jane', 'Bob', 'Kate']}
在定義一個字典時,可以在定義的時候做初始化,上面的userInfo也可以像下面這樣定義:
userInfo = {'name': 'Peter', 'id': 1121021, 'detail': {'addr': 'new york', 'age': 12, 'tel': '21232221021'},
'friend': ['Jane', 'Bob', 'Kate']}
遍歷字典
1.遍歷字典的鍵
通過for循環遍歷字典時,默認是遍歷所有的鍵
userInfo = {'100':'peter','101':'bob','103':'david','104':'jane','105':'kate','106':'jack'}
for key in userInfo:
print(key)
也可以使用keys()方法遍歷所有的鍵
for key in userInfo.keys():
print(key)
在遍歷鍵時還可以對鍵做排序操作,但是前提是鍵的類型都是一致的,否則會報錯
for key in sorted(userInfo.keys()):
print(key)
2.遍歷字典上的值
通過values()方法來遍歷所有的值
for value in userInfo.values():
print(value)
在遍歷值得時候也可以對值做排序操作,但是值得類型必須一致,否則會報錯
for value in sorted(userInfo.values()):
print(value)
直接遍歷值的時候可能會出現很多重複的值,可以使用set來對值做去重處理,前提是值的類型是一致的。
for value in set(userInfo.values()):
print(value)
3.遍歷鍵和值
使用items()方法可以同時遍歷鍵和值
for k,v in userInfo.items():
print('key = ' + k + ', value = ' + v)
字典嵌套
1.字典列表
列表的元素是字典
userInfos = []
userInfos.append({'name':'Peter','age':12})
userInfos.append({'name':'Jack','age':15})
userInfos.append({'name':'Jane','age':14})
userInfos.append({'name':'Mike','age':13})
print(userInfos)
2.字典中嵌套列表和字典
在字典中同時嵌套字典和列表,比如下面用字典來表示用戶信息,第一層是字典,字典裏面的興趣愛好又是列表。
userInfo = {
'peter':{
'id':'1234',
'age':12,
'tel':'172313133',
'like':['play guitar','sing','swim']
},
'bob':{
'id':'1235',
'age':14,
'tel':'17232333',
'like':['play basketball','sing','dance']
}
}
print(userInfo)