python基礎5-字典
數據類型
字典
字典定義、創建
字典是一種可變容器類型,且可以存儲任意類型對象。字典和列表的最大的區別是字典強調的是“鍵值對”,key與value一一對應,字典中的存放順序并不重要,重要的是“鍵”和“值”的對應關系。在字典中,要求key是唯一的,且不可變的。所以字典的特點如下:
- 查找速度快
- key-value序對沒有順序
- key鍵不可變且唯一
字典的創建,使用
{}
,每個鍵值對用
:
隔開,每對之間用
,
分割。還有使用dict和使用fromkeys的方法
>>
>
d1
=
{
'key'
:
'value'
}
# 使用dict()初始化字典,其中鍵必須是字符串
>>
>
d2
=
dict
(
key
=
'value'
)
# 使用dict創建時,下面的情況會出現bug
>>
>
key
=
'name'
>>
>
d3
=
dict
(
key
=
'value'
)
# 這個代碼,原本我們是想輸出{'name':'value'},可以結果并不一樣,所以使用dict初始化的時候需要注意
>>
>
print
(
d3
)
{
'key'
:
'value'
}
# 使用fromkeys方法初始化字典
#初始化
>>
>
d4
=
{
}
.
fromkeys
(
[
'key1'
,
'key2'
]
)
>>
>
d4
{
'key1'
:
None
,
'key2'
:
None
}
>>
>
d5
=
dict
(
)
.
fromkeys
(
[
'key1'
,
'key2'
]
)
>>
>
d5
{
'key1'
:
None
,
'key2'
:
None
}
# 初始化并賦值
>>
>
d6
=
{
}
.
fromkeys
(
[
'key1'
,
'key2'
]
,
'value'
)
>>
>
d6
{
'key1'
:
'value'
,
'key2'
:
'value'
}
# 也可以先初始化,然后動態地添加
>>
d7
=
{
}
>>
>
d7
[
'key1'
]
=
'value1'
>>
>
d7
[
'key2'
]
=
'value2'
>>
>
d7
{
'key1'
:
'value1'
,
'key2'
:
'value2'
}
# 使用zip函數把鍵列表和值列表打包成鍵值對一一對應的元組
>>
>
d8
=
dict
(
zip
(
[
'key1'
,
'key2'
]
,
[
'value1'
,
'value2'
]
)
)
>>
>
d8
{
'key1'
:
'value1'
,
'key2'
:
'value2'
}
# 字典推導表達式
>>
>
d9
=
{
x
:
x
**
2
for
x
in
[
1
,
2
,
3
]
}
>>
>
d9
{
1
:
1
,
2
:
4
,
3
:
9
}
訪問、修改字典
字典和列表一樣,是一種存儲數據的容器;在列表中,可以通過下標索引來訪問元素,在字典中通過鍵來訪問它的對應值,即key:value;可以修改,添加等操作。
>>
>
d1
=
{
'type'
:
'dict'
,
'code'
:
'python'
}
# 值訪問
>>
>
d1
[
'type'
]
'dict'
# 內容添加
>>
>
d1
[
1
]
=
2
>>
>
d1
{
'type'
:
'dict'
,
'code'
:
'python'
,
1
:
2
}
# 內容修改
>>
>
d1
[
'code'
]
=
'java'
>>
>
d1
{
'type'
:
'dict'
,
'code'
:
'java'
,
1
:
2
}
# 刪除元素,還可以是用del刪除某個字典的key,或者刪除整個字典;使用clear() 清空這個字典
>>
>
d1
=
{
'type'
:
'dict'
,
'code'
:
'python'
,
1
:
2
}
>>
>
d1
.
pop
(
'code'
)
# d1的值為{'type': 'dict', 1: 2}
>>
>
del
d1
[
1
]
# d1的值為{'type': 'dict'}
>>
>
d1
.
clear
(
)
# d1 = {}
>>
>
del
d1
>>
>
print
(
d1
)
# NameError: name 'd1' is not defined
# 如果有兩個字典,可以使用update函數來更新其中某一個字典
# 從下面代碼的結果上可以看出,如果d1中沒有d2的元素,則添加進來;如果有,則修改為d2中的值
>>
>
d2
=
{
1
:
3
,
2
:
4
,
5
:
6
}
>>
>
d1
.
update
(
d2
)
>>
>
d1
{
'type'
:
'dict'
,
1
:
3
,
2
:
4
,
5
:
6
}
字典的遍歷
d
=
{
'a'
:
1
,
'b'
:
2
,
'c'
:
3
}
# 遍歷key值
for
key
in
d
:
print
(
"{} : {}"
.
format
(
key
,
d
[
key
]
)
)
# 該方法和上面的方法是等價的
for
key
in
d
.
keys
(
)
:
print
(
"{} : {}"
.
format
(
key
,
d
[
key
]
)
)
# 遍歷value值
for
value
in
d
.
values
(
)
:
print
(
value
)
# 遍歷字典項
for
key_value
in
d
.
items
(
)
:
print
(
key_value
)
# 遍歷字典健值
for
key
,
value
in
d
.
items
(
)
:
print
(
"{} : {}"
.
format
(
key
,
value
)
)
字典的排序
字典的排序有兩種方法,第一種是 list()函數和字典的keys()方法相結合,對產生的list排序,然后輸出。第二種方法是使用內置函數sorted()進行排序,會返回排序好的鍵。
# 使用list()函數,和keys()相結合
d
=
{
1
:
2
,
7
:
8
,
3
:
4
,
5
:
6
}
d_key
=
list
(
d
.
keys
(
)
)
d_key
.
sort
(
)
for
key
in
d_key
:
print
(
key
,
d
[
key
]
)
# 使用sorted函數
for
key
in
sorted
(
d
)
:
print
(
key
,
d
[
key
]
)
判斷鍵值是否存在
在python2中判斷一個字典中某個key是否存在可以使用has_key和in兩種方法,但是在python3中只有in方法,
>>
>
d
=
{
'type'
:
'dict'
,
'code'
:
'java'
,
1
:
2
}
>>
>
'code'
in
d
True
>>
>
3
in
d
False
字典中get()方法
有這樣一種情況,我們想獲取字典中的某一個值,但是有不確定它是否存在,那么如果直接寫
dict[key]
肯定是不妥當的,那么只能是先判讀,然后在輸出。這樣寫是可以的,但是在python中提供了一種方法
get(key, default=None)
,即若果存在直接輸出結果,如果不存在,則輸出為default的值。
# 獲取字典中的值
d
=
{
'code'
:
'python'
}
if
'name'
in
d
:
print
(
d
[
'name'
]
)
else
:
print
(
'default'
)
# get()替代 if ... else ...
print
(
d
.
get
(
'name'
,
'default'
)
)
字典和列表的不同
- 從創建方式上,列表使用的是方括號,字典使用的是花括號。
- 字典里的對象是無序的,通過key-value來表示一種映射關系;列表中的元素是有序的,可以通過序號直接獲取元素,或者通過切片操作獲取多個元素。
- 相對而言,字典更耗費空間,因為需要維護key。
- list隨著數量的正常增長要想查找元素的時間復雜度為O(n), dict不隨數量而增長而變化,時間負責都為O(1)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
