1. 程式人生 > >第13課 字典

第13課 字典

一、字典

1、字典的定義:{ }   <class 'dict'>

>>> dict1 = {}
>>> type(dict1)
<class 'dict'>

2、dict1 = {鍵1:值,鍵2:值}

dict2 = {'name': 'Tom', 'age':18, 'weight': 130}

3、鍵值成對出現,不然會報錯。

>>> dict2 = {'name': 'Tom', 'age':18, 'weight': 130}
>>> dict3 = {'
name': 'jacky', 'age': 18, 'class'} SyntaxError: invalid syntax

4、通過鍵來查詢元素,沒有下標的概念。

>>> dict2 = {'name': 'Tom', 'age':18, 'weight': 130}
>>> dict2['weight']
130

1)用len(dict1)來獲取字典的長度

>>> dict2 = {name:'Tom', age:18 , weight:130}
>>> len(dict2)
3

5、字典裡沒有同名的key(鍵),就算有,後面的key也會把前面同名的key覆蓋掉。

>>> dict3 = {'name':'Tom', 'age':18, 'name':'Jacky'}
>>> dict3
{'name': 'Jacky', 'age': 18}

6、增加元素----格式:dict1[鍵名] = 值

1)python2--增加字典元素的位置是隨機的;

2)python3--從字典後面依次增加

>>> dict3 = {'name':'Tom', 'age':18}
>>> dict3['weight'] = 136
>>> dict3
{'
name': 'Tom', 'age': 18, 'weight': 136}

7、如果該字典裡面沒有這個key,那麼列印這個key對應的值會報錯----keyerror

>>> dict3 = {'name': 'Tom', 'age': 18, 'weight': 136}
>>> print(dict3['class'])
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    print(dict3['class'])
KeyError: 'class'

8、增加字典的元素:dict1[新鍵名] = 對應的值

9、字典可以儲存任意型別

# 一個鍵對應的值可以是任意型別
students = {
    'Jim Green': {'age': 18,   
                  'height': 186,
                  'weight': 180,
                  'nickname': 'Jimy'},
    'Linda Smith':{
        'age': 23,
        'height': 168,
        'weight': 108,
        'nickname': 'sweet'  }
}

print(students['Linda Smith'])


# 執行結果 
{'age': 23, 'height': 168, 'weight': 108, 'nickname': 'sweet'}

列印Jim的年齡資訊

print(students['Jim Green']['age'])  # 列印Jim的年齡

#輸出結果
18

10、關於key的型別,value的型別

1)key的型別:int、str、float和tuple,但是不能為list(列表)、dict(字典)。hash:散列表----不能改變的型別

注意:對鍵值操作時不要刻意改變key。

>>> dict1 = {1: 'int型', 3.14: 'float型', 'yy': 'str型', (6,7,8,9): 'tuple型'}
>>> dict1
{1: 'int型', 3.14: 'float型', 'yy': 'str型', (6, 7, 8, 9): 'tuple型'}

當key的型別為列表時會報錯

>>> dict1 = {[1,2,'yy']: 'list型'}
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    dict1 = {[1,2,'yy']: 'list型'}
TypeError: unhashable type: 'list'

key的型別為字典也報錯

>>> dict1 = {{'name': 'Tom'}: 33}
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    dict1 = {{'name': 'Tom'}: 33}
TypeError: unhashable type: 'dict'

2)value(值):可以為任意型別

 

二、常用操作

1、判斷字典裡是否有這個key,可以用---key in dict1;在python2中dict1.has.key(鍵)的形式。

>>> dict1 = {1: 'int型', 3.14: 'float型', 'yy': 'str型', (6,7,8,9): 'tuple型'}
>>> 3.14 in dict1
True
>>> 'xx' in dict1
False

2、關於字典的刪除元素:字典裡面的key相當於list裡面的index(下標)

1)del dict1['name']

>>> dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> del dict1['name']
>>> dict1
{'age': 21, 'weight': 130}

2) value =  dict1.pop('name')

>>> dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> dict1.pop('name')
'Tom'
>>> dict1
{'age': 21, 'weight': 130}

3、字典的遍歷

1)for one in dict1 ----one依次取key本身的值

>>> dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> for one in dict1:
    print(one)

    
name
age
weight

2)列印字典的值----dict的[one]

>>> dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> for one in dict1:  # one 指的是字典值的內容
    print(dict1[one])

    
Tom
21
130

3)列印字典特定的值-----dict1[one['age']]

students = {
    'Jim Green': {'age': 18,
                  'height': 186,
                  'weight': 180,
                  'nickname': 'Jimy'},
    'Linda Smith':{
        'age': 23,
        'height': 168,
        'weight': 108,
        'nickname': 'sweet'  }
}

for one in students:
    print(students[one]['age'])

# 執行結果
18
23

4)students.items()----遍歷字典的鍵值對[(鍵1,  值1),  (鍵2,  值2)]

print(students.items())

# 結果是一個列表,列表中包含元組
dict_items([('Jim Green', {'age': 18, 'height': 186, 'weight': 180, 'nickname': 'Jimy'}), ('Linda Smith', {'age': 23, 'height': 168, 'weight': 108, 'nickname': 'sweet'})])

把資訊從students.items()中取出來---for name, info in students.items():

students = {
    'Jim Green': {'age': 18,
                  'height': 186,
                  'weight': 180,
                  'nickname': 'Jimy'},
    'Linda Smith':{
        'age': 23,
        'height': 168,
        'weight': 108,
        'nickname': 'sweet'  }
}


for name, info in students.items():
    print(name, info)

# 執行結果
Jim Green {'age': 18, 'height': 186, 'weight': 180, 'nickname': 'Jimy'}
Linda Smith {'age': 23, 'height': 168, 'weight': 108, 'nickname': 'sweet'}

4、清空字典內容:

1)dict1.clear()----清空字典本身內容

>>> dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> dict1.clear()
>>> dict1
{}

2)dict1 = {}---把dict1指向一個空字典

>>> dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> dict1 = {}
>>> dict1
{}

5、獲取字典中所有的key----dict1.keys(),返回結果在一個列表中

 dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> dict1.keys()
dict_keys(['name', 'age', 'weight'])

6、獲取字典中所有的value-----dict1.values(),返回結果在一個列表中

>>> dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> dict1.values()
dict_values(['Tom', 21, 130])

7、獲取字典中所有的key,value,返回結果在一個列表中

>>> dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> dict1.items()
dict_items([('name', 'Tom'), ('age', 21), ('weight', 130)])

8、dict1.update----增加字典的元素

>>> dict1 = {'name': 'Tom', 'age': 21, 'weight': 130}
>>> dict1.update({1:1, 2:2})
>>> dict1
{'name': 'Tom', 'age': 21, 'weight': 130, 1: 1, 2: 2}

練習:2個字典所有的key都一樣,請列印具有相同的鍵值,並列印鍵值對

dict1 = {1: 'a', 2: 'b', 3: 'c', 4: 100, 5: 200}
dict2 = {1: 'x', 2: 'y', 3: 'z', 4: 100, 5: 200}


for num1 in dict1:
    for num2 in dict2:
        if num1 == num2 and dict1[num1] == dict2[num2]:
            print(num1, dict1[num1])


# 執行結果
4 100
5 200