python自學成才之路 字典詳細用法

字典介紹

字典使用{}表示,內部是一個個鍵值對,類似於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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章