Python中的映射數據類型 dict


********dict************

 字典是python中唯一的映射類型,采用鍵值對(key-value)的形式存儲數據。python對key進行哈希函數運算,根據計算的結果決定value的存儲地址,所以字典是無序存儲的,且key必須是可哈希的。可哈希表示key必須是不可變類型,如:數字、字符串、元組。

  字典(dictionary)是除列表意外python之中最靈活的內置數據結構類型。列表是有序的對象結合,字典是無序的對象集合。兩者之間的區別在於:字典當中的元素是通過鍵來存取的,而不是通過偏移存取。

*********dict*************

數據類型的划分:

可變數據類型(不可哈希):列表(list),字典(dict),集合(set)

不可變數據類型(可哈希):元組(tuple),int,str,bool

#dict 字典數據類型 key:value

                               key 必須是不可變數據類型,可哈希

                               value:任意數據類型

dict:的優點  1,采用二分查找法查詢 2,存儲大量的關系類型數據

##字典是無序的,也就意味着沒有索引,可采用鍵值對的KEY 查找!!!

1. dict的增加 #有鍵值對,就在后面直接添加 #有鍵值對,就將對應的值覆蓋

#dict的增加
dic = {"name":"span","age":28,"hobby":"Programming"}
print(dic)
dic["heigh"] = 188#增加 沒有鍵值對,就在后面直接添加
dic["age"] = 33 #增加 有鍵值對,就將對應的值覆蓋
print(dic)
>>>{'name': 'span', 'age': 28, 'hobby': 'Programming'}
>>>{'name': 'span', 'age': 33, 'hobby': 'Programming', 'heigh': 188}

pS: dict.setdefault(k,v) #有鍵值對不做任何改動,沒有就添加

#dict.setdefault()的增
dic = {"name":"span","age":28,"hobby":"Programming"}
dic.setdefault("age",33) #沒有就增加,有什么都不做
dic.setdefault("heigh",188)
print(dic)
>>>{'name': 'span', 'age': 28, 'hobby': 'Programming', 'heigh': 188}

2.dict 的刪除

# dict.pop(key) PS:有返回值

#dict 的刪除# dict.pop(key) PS:有返回值
dic = {"name":"span","age":28,"hobby":"Programming"}
print(dic.pop("name"))
print(dic)

print(dic.pop("weight","沒有此鍵")) #如果刪除的字典中沒有鍵,會報錯。當傳過來一個字典,不知道有沒有鍵,但還是要刪除時,用一個提示信息(可設置返回值)
>>>span >>>{'age': 28, 'hobby': 'Programming'}>>>沒有此鍵

###dict.popitem()

# dict.popitem()
dic = {"name":"span","age":28,"hobby":"Programming"}
print(dic.popitem()) #隨機刪除,默認刪除最后一個鍵值對,返回值是一個元組
print(dic)
>>>('hobby', 'Programming')
>>>{'name': 'span', 'age': 28}

###dict.clear() 清空字典

       del dict[key] #刪除字典的鍵值對,沒有鍵會報錯,所以最好用dict.pop()

dic = {"name":"span","age":28,"hobby":"Programming"}
del dic["name"]
print(dic)
>>>{'age': 28, 'hobby': 'Programming'}

3.###字典的更新 dic.update()

#dict.update()
dic1 = {"name":"span","age":28,"hobby":"Programming"}
dic2 = {"name":"yougen","age":88,"sex":"male"}
dic2.update(dic1)
print(dic1)
print(dic2)

>>>{'name': 'span', 'age': 28, 'hobby': 'Programming'}
>>>{'name': 'span', 'age': 28, 'sex': 'male', 'hobby': 'Programming'}
將dic1 更新到dic2 ;原來的dic1不變

4.####dict.keys();dict.values();dict.items()

##dict.keys();dict.values();dict.items()
dic = {"name":"span","age":28,"hobby":"Programming"}
print(dic.keys()) #返回的是列表
print(dic.values())#返回的是列表
print(dic.items())#返回的是元組
>>>dict_keys(['name', 'age', 'hobby'])
>>>dict_values(['span', 28, 'Programming'])
>>>dict_items([('name', 'span'), ('age', 28), ('hobby', 'Programming')])

###也可以采用for循環查找

#for循環查找
dic = {"name":"span","age":28,"hobby":"Programming"}
for i in dic:#默認的是遍歷key
    print(i)
>>>
name
age
hobby


for i in dic.values():
    print(i)
>>>
span
28
Programming

附加內容:

#####
a,b = [1,2]
print(a,b)
#####
a,b = [1.2,3],[2,8]
print(a,b)
######
a,b = (a,b)
print(a,b)

>>>1 2
>>>[1.2, 3] [2, 8]
>>>[1.2, 3] [2, 8]
##用dict.items()循環打印
dic = {"name":"span","age":28,"hobby":"Programming"}
for k,v in dic.items(): print(k,v) >>> name span age 28 hobby Programming

#查找某個鍵對應的值

dict[key] #如果沒有鍵,報錯

dict.get(key,None) #查找鍵對應的值,若沒有這個鍵默認返回None,也可以自定義返回值

##dict.get(key,None)
dic = {"name":"span","age":28,"hobby":"Programming"}
print(dic.get("Hight"))##沒有這個鍵時,返回None

>>>None

###dict的嵌套

##dict的嵌套
dic = {
    "name":["span","xiaogang","hongjie"],
    "06級":{
            "time":"2006",
            "class":55,
            "addr":"WuHan"
            },
    "av_age":22
    }
print(dic)
##將av_age 改成18
dic["av_age"] = 18
print(dic)

##將“name”中“hongjie”全部大寫
dic["name"][2] = dic["name"][2].upper()
print(dic)
##在06級的字典里增加一個新的鍵值對 “female”:8
dic["06級"]["female"] = 8
print(dic)
 
         
>>>{'name': ['span', 'xiaogang', 'hongjie'], '06級': {'time': '2006', 'class': 55, 'addr': 'WuHan'}, 'av_age': 18}
>>>{'name': ['span', 'xiaogang', 'HONGJIE'], '06級': {'time': '2006', 'class': 55, 'addr': 'WuHan'}, 'av_age': 18}
>>>{'name': ['span', 'xiaogang', 'HONGJIE'], '06級': {'time': '2006', 'class': 55, 'addr': 'WuHan', 'female': 8}, 'av_age': 18}

###Exercise 1

##Exercise 計算輸入數字的個數
info = input(">>>>>>>>")#可在后面加個strip剔除前后的空格
for i in info:#因為info是字符串,不可變數據類型
    if i.isalpha():
        info = info.replace(i," ")#所以即使同名也對之前的info做不了更改
li = info.split()
print(len(li))

 ###Exercise 2

##將一個列表里的數分類 大於88的放到k1鍵對應的列表里,小於88的放在另一個列表k2里
#####
li = [55,6,44,88,78,45,99,123,456,3,5]
dic = {}
li_greater = []
li_less = []
for i in li:
    if i ==88: continue
    if i > 88:
        li_greater.append(i)
    else:
        li_less.append(i)
dic.setdefault("K1",li_greater) #或者 dic["K1"] = li_greater
dic.setdefault("K2",li_less)  #或者 dic["K2"] = li_less
print(dic)

>>>>{'K1': [99, 123, 456], 'K2': [55, 6, 44, 78, 45, 3, 5]}

###Exercise 3

#輸出商品列表,用戶輸入序號。顯示用戶選中的商品
'''要求:1,商品列表 li = ["手機","電腦","服裝","零食","手表"] 2,用戶輸入選擇的商品序號,然后打印商品名稱(如:1 手機; 2 電腦),3,如果輸入的
商品序號有誤,則提示輸入有誤,並重新輸入,4,輸入Q或者q退出。'''
###
flag = True
while flag: #定義一個標志位方便以后修改
    li = ["手機","電腦","服裝","零食","手表"]
    for i in li:
        print("{}\t{}".format(li.index(i)+1,i)) #li.index(value)  通過值找索引
    num_of_goods = input("請輸入選擇的商品序號/輸入Q或者q退出程序:")
    if num_of_goods.isdigit():#判斷輸入的是否是數字
        num_of_goods = int(num_of_goods)
        if num_of_goods > 0 and num_of_goods <= len(li):#判斷輸入數字的取值范圍
            print(li[num_of_goods-1]) #通過索引打印列表的值
        else:print("請輸入有效的數字!")
    elif num_of_goods.upper() == "Q": break
    else:print("請輸入數字!")

 

 


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM