字典详解(Python)

1.字典dict的基本概念

字典是另一种可变容器模型,且可存储任意类型对象

字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用(,)分割,整个字典包括在

花括号({})中

键必须是唯一的,但值不必

dic = {'大头儿子':6, '小头爸爸': 35, '隔壁老王':37}
print(dic,type(dic))
{'小头爸爸': 35, '隔壁老王': 37, '大头儿子': 6} <class 'dict'>

也可以存一个以字典为元素的列表

dic = [{'name':'Tom', 'age':18},{'name':'Jack', 'age':19},{'name':'Alex', "age":17}]
print(dic)
[{'age': 18, 'name': 'Tom'}, {'age': 19, 'name': 'Jack'}, {'age': 17, 'name': 'Alex'}]

2.字典的特点:

键值对,一定共同出现,不能只有一个

不允许同一个键出现两次,创建时如果同一个键被赋值两次,后一个值会被记住

dic = {'a':1,'a':2}
print(dic)
{'a': 2}

key必须是字符串,value可以是任何对象:数值,字符串,序列,字典

dic = {'var1':1, 'var2':'hello', 'var3':[1,2,3], 'var4':{'a':1,'b':2}}
print(dic)
{'var1': 1, 'var3': [1, 2, 3], 'var4': {'b': 2, 'a': 1}, 'var2': 'hello'

字典是一个无序集合,序列由于没有key来做对应,所以以顺序来对应值

所以字典没有顺序,序列有顺序

dic['var5'] = '添加一个值'  # 任意添加元素
dic['var4'] = '任意修改其中一个值'  # 任意修改元素
del dic['var1']  # 任意删除元素
print(dic)
{'var5': '添加一个值', 'var3': [1, 2, 3], 'var4': '任意修改其中一个值', 'var2': 'hello'}

可以清空字典或者删除字典

dic.clear()  # 清空词典所有条目
print(dic)

del dic  # 删除词典
{}

3.申明字典:

最简单直接的方式,手动书写申明一个字典变量,注意是:  不是=

dic = {'a':1,'b':2}

dict()函数

dic = dict(m = 10 ,n = 'aa', h = [1,2,3])
print(dic)
{'n': 'aa', 'm': 10, 'h': [1, 2, 3]}

dict()由序列生成一个字典,嵌套序列,可以是list或者tuple

lst1=[("a","fff"),("b","ggg")]
lst2=[["c",1],["d",2]]
lst3=(("e",[1,2]),("f",[3,4]))
dic1 = dict(lst1)
dic2 = dict(lst2)
dic3 = dict(lst3)
print(dic1,dic2,dic3)
{'b': 'ggg', 'a': 'fff'} {'d': 2, 'c': 1} {'f': [3, 4], 'e': [1, 2]}

只有Key,直接生成一个字典

keys = ["a", "b", "c"]
dic1 = dict.fromkeys(keys)
dic2 = dict.fromkeys(keys, 'hello')
print(dic1,dic2)
{'b': None, 'a': None, 'c': None} {'b': 'hello', 'a': 'hello', 'c': 'hello'}

4.字典常用操作:

dict.update()方法:更新/合并一个字典,把第二个字典合并到第一个字典,改变了第一个字典

dic1 = {"a":1, "b":2}
dic2 = {"c":3, "d":4}
dic1.update(dic2)
print(dic1,dic2)
{'b': 2, 'd': 4, 'a': 1, 'c': 3} {'d': 4, 'c': 3}

和序列的原理一样,a和b指向同一个字典,所以会一起更新

a = {'m':1 , 'n':2 , 'p':3}
b = a
a.update({'q':4})
print(a,b)
{'n': 2, 'm': 1, 'p': 3, 'q': 4} {'n': 2, 'm': 1, 'p': 3, 'q': 4}

通过.copy()方法,复制一个新的字典

a = {'m':1 , 'n':2 , 'p':3}
b = a.copy()
a.update({'q':4})
print(a,b)
{'n': 2, 'm': 1, 'p': 3, 'q': 4} {'n': 2, 'm': 1, 'p': 3}

查看字典元素个数

print(len(a))
4

in/not in:判断是否包含,这里的判断对象是key

print('m' in a)
print(1 in a)
True
False

5.字典的元素访问:

字典没有顺序,以key作为指向,所以指向key必须存在

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

对于嵌套字典,输出嵌套内容,通过重复指向来输出

poi = {'name':'shop', 'city':'shanghai', 'information':{'address':'somewhere', 'num':66663333}}
print(poi['information']['address'])
somewhere

.get(key)方法:直接查看key的value,如果没有相应的key,则返回None,添加print参数可以多返回一个值

print(poi.get('name'))
print(poi.get('type',print('nothing')))
shop
nothing
None

.keys()方法:输出字典所有key,格式为视图,可以用list()得到key的列表

print(poi.keys(),type(poi.keys()))
print(list(poi.keys()))
dict_keys(['information', 'name', 'city']) <class 'dict_keys'>
['information', 'name', 'city']

.values()方法:输出字典所有values,格式为视图,可以用list()得到values的列表

print(poi.values(),type(poi.values()))
print(list(poi.values()))
dict_values([{'num': 66663333, 'address': 'somewhere'}, 'shop', 'shanghai']) <class 'dict_values'>
[{'num': 66663333, 'address': 'somewhere'}, 'shop', 'shanghai'

.items()方法:输出字典所有items,格式为视图,可以用list()得到items的列表

print(poi.items(),type(poi.items()))
print(list(poi.items())) 
dict_items([('information', {'num': 66663333, 'address': 'somewhere'}), ('name', 'shop'), ('city', 'shanghai')]) <class 'dict_items'>
[('information', {'num': 66663333, 'address': 'somewhere'}), ('name', 'shop'), ('city', 'shanghai')]

6.字典的元素遍历:

poi = {'name':'shop', 'city':'shanghai', 'information':{'address':'somewhere', 'num':66663333}}
for key in poi.keys():
    print(key)
print('-------')

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

for (k,v) in poi.items():
    print('key为 %s, value为 %s' %(k,v))
print('-------')  
information
name
city
-------
{'num': 66663333, 'address': 'somewhere'}
shop
shanghai
-------
key为 information, value为 {'num': 66663333, 'address': 'somewhere'}
key为 name, value为 shop
key为 city, value为 shanghai
-------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值