Python_字典

本文详细介绍了Python字典的创建、操作及其实现原理。从空字典、多元素字典的创建,到通过fromkeys方法创建字典,再到字典的增、删、改、查等常见操作,全方位解析字典的使用。强调了字典的无序性和通过键访问元素的特点,并提供了实际操作示例。

字典

1.假如有一个列表:

li = [“Pyth”,“Java”,“C”]

li[0]=“Python”

li.sort()

2.假如统计学生信息,包括学号,姓名,年龄:

li = [[31502001,“xue1”,18],

[31502002,“xue2”,18],

31502nnn,“xuennn”,19]]

循环遍历,十分复杂

考虑字典

字典是列表以外Python中使用最灵活的内置数据类型

字典是一种可变的数据类型。

和列表的区别:

  • 列表有序,字典无序
  • 列表通过索引访问元素,字典通过键(key)访问元素

字典的基本格式:

dic = {key: value1,key2: value2,...,keyn: valuen}

值可以取任意数据类型,但键不可以,必须为不可变类型数据,即key必须可哈希

可哈希—>不可变

不可哈希—>可变

特点:

  • 1.key: value ,键值对之间用冒号(:)连接
  • 2.key: value 组成字典的一个元素
  • 3.键值对直尖用逗号(,)隔开
  • 4.整个字典用花括号{}包裹

字典的创建

空字典

dic = {}
print(type(dic))

<class 'dict'>

创建多元素字典

dic = {'小明':{'add':'杭州','phone':'110','age':18},
       '小陈': {'add': '上海', 'phone': '120', 'age': 19}}

强转

dic = dict(id=2019,name='Tom',age=18)
print(dic)

{'id': 2019, 'name': 'Tom', 'age': 18}

zip()
key = ('id','name','age')
value = ('2019','Tom','18')
print(dict(zip(key,value)))
tp = tuple(zip(key,value))
print(tp,type(tp))

{'id': '2019', 'name': 'Tom', 'age': '18'}
(('id', '2019'), ('name', 'Tom'), ('age', '18')) <class 'tuple'>

通过字典的fromkeys方法创建字典

格式:

dict.fromkeys(seq,val=None)
  • 创建并返回一个字典
    • 以seq中的元素作为该字典的键
    • val的值作为该字典中所有键对应的初始值;如不提供。默认为None。
dic = dict.fromkeys('Hello',6666)
print(dic)

{'H': 6666, 'e': 6666, 'l': 6666, 'o': 6666}


dic = dict.fromkeys(('Hello','Hi'),6666)   
print(dic)

{'Hello': 6666, 'Hi': 6666}

fromkeys expected at most 2 arguments,所以此处Hello和Hi需要打包

字典的常见操作

  • 直接添加键值对(dic[key] = value)
    • 通过使用 变量名[‘键’] = ‘值’
      • 如果key不存在,新建键值对(key: value)
      • 如果存在,更新值(value)
dic = {}
dic['键'] = '值'
dic['name'] = 'Tom'
dic['age'] = 18
dic['age'] = 19
print(dic)

{'键': '值', 'name': 'Tom', 'age': 19}

小测试,输入ID,NAME,AGE组成字典,输入Q结束,结果保存在列表中

key = ('id','name','age')
li = []
while True:
    sr = input("输入id,name,age(以空格隔开,输入Q结束):")
    if sr == 'Q':
        break
    value = sr.split(' ')
    value[2] = int(value[2])
    li.append(dict(zip(key,value)))
print(li)
key = ('id','name','age')
li = []
while True:
     id = input('输入id:')
     if id == 'Q':
         break
     name = input('输入name:')
     age = int(input('输入age:'))
     value = (id,name,age)
     li.append(dict(zip(key,value)))
 print(li)
li = []
while True:
    dic = {}
    id = (input('输入ID:'))
    if id =='Q':
        break
    name = input('输入name:')
    age = int(input('输入age:'))

    dic['id'] = id
    dic['name'] = name
    dic['age'] = age
    li.append(dic)
print(li)
  • dict.update(dic)

    把字典dic中的键值对(key: value)更新到dict中。

    • 两个字典的键完全不同,则将dic的键值对全部添加至dict中
    • 如果存在相同的键,则更新dict中对应的值
dic = {'job':'IT','hobby':'read'}
dict = {'id':31502286,'name':'Tom','age':20}
dict.update(dic)
print(dict)
{'id': 31502286, 'name': 'Tom', 'age': 20, 'job': 'IT', 'hobby': 'read'}

dic2 = {'job':'IT','hobby':'read','name':'Jack'}
dict = {'id':31502286,'name':'Tom','age':20}
dict.update(dic2)
print(dict)

{'id': 31502286, 'name': 'Jack', 'age': 20, 'job': 'IT', 'hobby': 'read'}

  • dict.pop
    • 格式:```dict.pop(key[,default])
      • 如果key存在于dict中,删除并返回dict[key]
      • 如果不存在,给出默认值则返回默认值,未给出默认值,报错
dict = {'id':31502286,'name':'Tom','age':20}
print(dict.pop('age'))
print(dict)
20
{'id': 31502286, 'name': 'Tom'}

dict = {'id':31502286,'name':'Tom','age':20}
print(dict.pop('age',23))
print(dict)

20    
{'id': 31502286, 'name': 'Tom'}

dict = {'id':31502286,'name':'Tom','age':20}
print(dict.pop('job'))  # 不存在 报错
  • dict.popitem()
    • 随机删除一对键值对(可视的最后一对)
    • 有返回值,元组
dict = {'id':31502286,'name':'Tom','age':20}
print(dict.popitem())
key, value = dict.popitem()
print(dict)
print(key, value)
#执行了 两次删除
('age', 20)
{'id': 31502286}
name Tom
  • del dict[key] / del dict
dict = {'id':31502286,'name':'Tom','age':20}
del dict['age']
print(dict)

{'id': 31502286, 'name': 'Tom'}
  • dict.clear()
dict = {'id':31502286,'name':'Tom','age':20}
dict.clear()
print(dict)

{}

  • 直接修改
dic = {'id':31502286,'name':'Tom','age':20}
dic['id'] = 31502288
print(dic)
  • setdefault()
    • 键存在,不改动,返回对应值
    • 键不存在,在字典中添加对应的键值对,并返回对应的值
dic = {'id':31502286,'name':'Tom','age':20}
print(dic.setdefault('id','001'))   
print(dic)
#键存在 则返回对应值 31502286.
31502286
{'id': 31502286, 'name': 'Tom', 'age': 20}
dic = {'id':31502286,'name':'Tom','age':20}
print(dic.setdefault('加入','001'))
print(dic)
#键不存在 则加入键值对 并返回值 001
001
{'id': 31502286, 'name': 'Tom', 'age': 20, '加入': '001'}

字典值的访问

  • 通过key访问value
dic = {'id':31502286,'name':'Tom','age':20}
print(dic['id'])   #键查询
print(dic['ID'])   #键不存在,将报错

31502286
  • dict.get() 访问value
    • 语法格式 dict.get(key[,default])
    • 不确定字典中是否存在某个键而又想对齐操作,比如获取值—>get方法
    • 当key不存在的时候,返回None
dic = {'id':31502286,'name':'Tom','age':20}
print(dic.get('id'))
print(dic.get('Job'))

31502286
None
  • 遍历
    • dict.keys()
    • dict.values()
    • dict.items()
dic = {'id':31502286,'name':'Tom','age':20}
print(dic.keys())
print(dic.values())
print(dic.items())

dict_keys(['id', 'name', 'age'])
dict_values([31502286, 'Tom', 20])
dict_items([('id', 31502286), ('name', 'Tom'), ('age', 20)])
dic = {'id':31502286,'name':'Tom','age':20}
for key in dic.keys():
    print(key,end=' ')
    
id name age 
dic = {'id':31502286,'name':'Tom','age':20}
for value in dic.values():
    print(value,end=' ')
    
31502286 Tom 20 
dic = {'id':31502286,'name':'Tom','age':20}
for item in dic.items():
    print(item,end=' ')
    
('id', 31502286) ('name', 'Tom') ('age', 20) 
dic = {'id':31502286,'name':'Tom','age':20}
for key,value in dic.items():
    print(key ,':' ,value)
    
id : 31502286
name : Tom
age : 20
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值