零基礎入門python3.7 ——基礎知識總結(六)字典(dict)

一。 字典

是一種無序的。可變的序列。他的元素以鍵值對的形式存在。字典中習慣將各元素的索引叫做鍵。鍵所對應的元素叫做值。 將鍵及其值稱之爲鍵值對

  • 字典的特徵
通過鍵而不是索引讀取值 字典類型有時也稱爲關聯數組或者散列表(hash)。它是通過鍵將一系列的值聯繫起來的,這樣就可以通過鍵從字典中獲取指定項,但不能通過索引來獲取。
字典是任意數據類型的無序集合 和列表、元組不同,通常會將索引值 0 對應的元素稱爲第一個元素,而字典中的元素是無序的。
字典是可變的,並且可以任意嵌套 字典可以在原處增長或者縮短(無需生成一個副本),並且它支持任意深度的嵌套,即字典存儲的值也可以是列表或其它的字典。
字典中的鍵必須唯一 字典中,不支持同一個鍵出現多次,否則只會保留最後一個鍵值對
字典中的鍵必須不可變 字典中的值是不可變的,只能使用數字、字符串或者元組,不能使用列表。

二。創建字典

     1。 使用{}創建字典。鍵與值之間必須要用":"隔開。 鍵值對之間必須要用逗號“,”隔開。

a = {
    "name": "小張",
    "age": 24,
    "tall": 178
}

b = {
    (1, 2): 24,
    20: 20,
    "list": [1, 2, 3]
}

print(a)
print("--------")
print(b)


{'name': '小張', 'age': 24, 'tall': 178}
--------
{(1, 2): 24, 20: 20, 'list': [1, 2, 3]}

   2。使用fromkeys(()方法創建帶有默認值的字典,該方法必須要有創建鍵的參數。否則會報錯

a = dict.fromkeys(["語文", '數學', '英語'],  80)
print(a)
print("----------")

b = dict.fromkeys(["語文", '數學', '英語'])
print(b)
print("-----------")

c = dict.fromkeys()
print(c)

{'語文': 80, '數學': 80, '英語': 80}
----------
{'語文': None, '數學': None, '英語': None}
-----------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 9, in <module>
    c = dict.fromkeys()
TypeError: fromkeys expected at least 1 arguments, got 0

  3。dict() 映射函數創建字典

a = dict([['q', 1], [2, 3]])
print(a)
print('--------')

b = dict([('q', 1), (2, 3)])
print(b)
print('---------')

c = dict((['q', 1], [2, 3]))
print(c)
print('----------')

d = dict((('q', 1), (2, 3)))
print(d)


{'q': 1, 2: 3}
--------
{'q': 1, 2: 3}
---------
{'q': 1, 2: 3}
----------
{'q': 1, 2: 3}

三。字典的訪問

和列表,元組不同的是字典是通過鍵訪問元素的而不是通過下標訪問的。 因爲字典的是無序的。

a = {
    1: 1,
    "a": 3,
    "b": 5
}

print(a[1])
print("------")

print(a['a'])
print('-------')

print(a[1000])


1
------
3
-------
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 13, in <module>
    print(a[1000])
KeyError: 1000

python還提供了get方法訪問元素,與上述不同的是該方法在訪問不到元素時不會報錯而是返回None

a = {
    1: 1,
    "a": 3,
    "b": 5
}

print(a.get(1))
print('-------')

print(a.get('a'))
print('--------')

print(a.get(10))


1
-------
3
--------
None

四。字典的刪除

和列表。元組一樣字典也可以使用del關鍵字刪除。 因爲有垃圾回收機制的存在一般不會手動去刪除

a = {
    1: 1,
    "a": 3,
    "b": 5
}

print(a)
del a
print(a)


{1: 1, 'a': 3, 'b': 5}
Traceback (most recent call last):
  File "/Users/apple/Desktop/python3/python20.py", line 9, in <module>
    print(a)
NameError: name 'a' is not defined

五。字典添加鍵值對

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

a["語文"] = 1000
a[12] = "添加了數字"

print(a)


{1: 1, 'a': 3, 'b': 5}
--------
{1: 1, 'a': 3, 'b': 5, '語文': 1000, 12: '添加了數字'}

六。字典的修改

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

a[1] = 1000
a['a'] = 'java'
print(a)

{1: 1, 'a': 3, 'b': 5}
--------
{1: 1000, 'a': 'java', 'b': 5}

七 字典刪除鍵值對

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

del a['a']
print(a)

{1: 1, 'a': 3, 'b': 5}
--------
{1: 1, 'b': 5}

八。判斷字典中是否存在元素

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

print('a' in a)
print('-------')
print("a" not in a)
print('-------')
print('100' in a)
print('-------')
print('100' not in a)


{1: 1, 'a': 3, 'b': 5}
--------
True
-------
False
-------
False
-------
True

九。keys()、values() 和 items() 方法

  • keys() 方法用於返回字典中的所有鍵(key);
  • values() 方法用於返回字典中所有鍵對應的值(value);
  • items() 用於返回字典中所有的鍵值對(key-value)
a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

print(a.keys())
print('-------')

print(a.values())
print('-------')

print(a.items())


{1: 1, 'a': 3, 'b': 5}
--------
dict_keys([1, 'a', 'b'])
-------
dict_values([1, 3, 5])
-------
dict_items([(1, 1), ('a', 3), ('b', 5)])

爲什麼會出現上述結果。 原因是在python3中不希望用戶直接操作返回值。 一般有以下兩種方法可以使我們使用返回值

1  list() 函數

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

print(list(a.keys()))
print('-------')

print(list(a.values()))
print('-------')

print(list(a.items()))


{1: 1, 'a': 3, 'b': 5}
--------
[1, 'a', 'b']
-------
[1, 3, 5]
-------
[(1, 1), ('a', 3), ('b', 5)]

2。for-in遍歷

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

for key in a.keys():
    print(key)
print('-------')

for value in a.values():
    print(value)
print('-------')

for k, v in a.items():
    print(k, v)


{1: 1, 'a': 3, 'b': 5}
--------
1
a
b
-------
1
3
5
-------
1 1
a 3
b 5

十。copy() 方法  拷貝字典

a = {
    1: 1,
    "a": 3,
    "b": 5
}
print(a)
print('--------')

b = a.copy()
print(a)

{1: 1, 'a': 3, 'b': 5}
--------
{1: 1, 'a': 3, 'b': 5}

注意,copy() 方法所遵循的拷貝原理,既有深拷貝,也有淺拷貝。

a = {
    1: 1,
    "a": 3,
    "b": [1, 2]
}
print(a)
print('--------')

# 向 a 中添加新鍵值對,由於b已經提前將 a 所有鍵值對都深拷貝過來,因此 a 添加新鍵值對,不會影響 b。
b = a.copy()
a[1000] = 10000
print(b)
print(a)
print("----------")

# 由於 b 和 a 共享[1,2,3](淺拷貝),因此移除 a 中列表中的元素,也會影響 b。
a["b"].remove(1)
print(a)
print(b)


{1: 1, 'a': 3, 'b': [1, 2]}
--------
{1: 1, 'a': 3, 'b': [1, 2]}
{1: 1, 'a': 3, 'b': [1, 2], 1000: 10000}
----------
{1: 1, 'a': 3, 'b': [2], 1000: 10000}
{1: 1, 'a': 3, 'b': [2]}

十一。update() 方法

使用一個字典所包含的鍵值對來更新己有的字典,如果被更新的字典中己包含對應的鍵值對,那麼原 value 會被覆蓋;如果被更新的字典中不包含對應的鍵值對,則該鍵值對被添加進去。

a = {
    1: 1,
    "a": 3,
    "b": [1, 2]
}
print(a)
print('--------')

a.update({1: 1000, 2000: 30000})
print(a)


{1: 1, 'a': 3, 'b': [1, 2]}
--------
{1: 1000, 'a': 3, 'b': [1, 2], 2000: 30000}

十二。pop() 和 popitem() 方法

pop() 和 popitem() 都用來刪除字典中的鍵值對,不同的是,pop() 用來刪除指定的鍵值對,而 popitem() 用來隨機刪除一個鍵值對,

 = {
    1: 1,
    "a": 3,
    "b": [1, 2]
}
print(a)
print('--------')

a.pop("a")
print(a)

a.popitem()
print(a)


{1: 1, 'a': 3, 'b': [1, 2]}
--------
{1: 1, 'b': [1, 2]}
{1: 1}

說明 popitem() 隨機刪除字典中的一個鍵值對是不準確的,雖然字典是一種無須的列表,但鍵值對在底層也是有存儲順序的,popitem() 總是彈出底層中的最後一個 key-value,這和列表的 pop() 方法類似。

十三 setdefault() 方法

返回某個 key 對應的 value,

a = {
    1: 1,
    "a": 3,
    "b": [1, 2]
}
print(a)
print('--------')

a.setdefault(1000)
print(a)

a.setdefault("語文", 1000)
print(a)

a.setdefault(1, 20000)
print(a)



{1: 1, 'a': 3, 'b': [1, 2]}
--------
{1: 1, 'a': 3, 'b': [1, 2], 1000: None}
{1: 1, 'a': 3, 'b': [1, 2], 1000: None, '語文': 1000}
{1: 1, 'a': 3, 'b': [1, 2], 1000: None, '語文': 1000}
  • 如果該 key 存在,那麼直接返回該 key 對應的 value;
  • 如果該 key 不存在,那麼先爲該 key 設置默認的 defaultvalue,然後再返回該 key 對應的 defaultvalue。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章