python 字典

字典

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

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

和列表的区别:

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

字典的基本格式:

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

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

(可哈希……不可变,不可哈希……可变)

info = {'id': 31602312, 'name': 'Tom', 'age': 18}
key:value   #键值对   

print(info)

特点:

  • Key:value,键值对之间用冒号(:)连接
  • Key:value 组成一个元素
  • 键值对直接用逗号隔开
  • 整个字典用花括号({})包裹

字典的创建

空字典

dic = {}
print(type(dic))

<class 'dict'>

创建多元素字典

info = {'id': 31602312, 'name': 'Tom', 'age': 18}
print(len(info))

3

不可通过位置索引,因为是无序的

info = {'id': 31602312, 'name': 'Tom', 'age': 18}
print(info[0])

报错

只能通过key索引

info = {'id': 31602312, 'name': 'Tom', 'age': 18}
print(info['id'])

31602312
key1, key2, key3 = 'id', 'name', 'age'
value1, value2, value3 = 31602312, 'tom', 18
print({key1: value1, key2: value2, key3: value3, })

{'id': 31602312, 'name': 'tom', 'age': 18}

强转

dic = dict(id=31602312, name='tom', age=18)
print(dic)

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


{'id': 31602312, 'name': 'tom', 'age': 18}
(('id', 31602312), ('name', 'tom'), ('age', 'age')) <class 'tuple'>
{'id': 31602312, 'name': 'tom', 'age': 18}

字典强转其他的,只能输出键的值

key = ('id', 'name', 'age')
value = (31602312, 'tom', 'age')
tp = tuple(dict(zip(key, value)))
print(tp, type(tp))

('id', 'name', 'age') <class 'tuple'>

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

格式:

dic = fromkeys(sep,val=none)
  • 创建并返回一个字典
    • 以sep中的元素作为该字典的键
    • val的值作为该字典中所有键对应的初始值;如不提供,默认为none

fromkeys内置最多两个元素

dic = dict.fromkeys(['Tom', 'Jack', 'Lucy'], 666)
print(dic)

{'Tom': 666, 'Jack': 666, 'Lucy': 666}

字典的常见操作

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

{}
{'id': 31602312, 'name': 'Tom', 'age': 20}
  • 小练习

    用input输入一个id,名字,年龄,创建一个字典,将输入的内容放在字典中,循环输出放进一个列表中,如:

    a = [{'id': 31602312, 'name': 'Tom', 'age': 20},
         {'id': 31602313, 'name': 'Lucy', 'age': 22},
         ...
         ]
    
li = []
while True:
    flag = input('是否继续:(y or n)')
    if flag == 'n':
        break
    else:
        dic = {}
        id = int(input("请输入id:"))
        name = input("请输入名字:")
        age = int(input("请输入年龄:"))

        dic['id'] = id
        dic['name'] = name
        dic['age'] = age
        li.append(dic)

print(dic)
print(li)

是否继续:(y or n)y
请输入id:123
请输入名字:ss
请输入年龄:12
是否继续:(y or n)n
{'id': 123, 'name': 'ss', 'age': 12}
[{'id': 123, 'name': 'ss', 'age': 12}]
  • dict.update(dic)

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

    • 两个字典的键完全不同,则将dic的键值对全部添加到dict中
    • 存在相同的键,则更新dict中对应的值
    dic = {'name':'daming','hobby':'Read'}
    dict = {'id': 31602312, 'name': 'Tom', 'age': 18}
    dict.update(dic)
    print(dict)
    
    {'id': 31602312, 'name': 'daming', 'age': 18, 'hobby': 'Read'}
    

###删

  • dict.pop()
    • 格式:dict.pop(key) 删除key所对应的键值对
      • 如果key存在dict中,删除并返回dict[key]
      • 如果不存在,给出默认值并返回默认值,未给出默认值,报错
dict = {'id': 31602312, 'name': 'Tom', 'age': 18}
dict.pop('id')
print(dict)
print(dict.pop('age'))
print(dict.pop('name','dd'))
print(dict.pop('id','dd'))

{'name': 'Tom', 'age': 18}
18
Tom
dd
dict = {'id': 31602312, 'name': 'Tom', 'age': 18}
dict.pop('name','dd')
print(dict)

{'id': 31602312, 'age': 18}
dict = {'id': 31602312, 'name': 'Tom', 'age': 18}
dict.pop('ss','dd')
print(dict)

{'id': 31602312, 'name': 'Tom', 'age': 18}
  • dict.popitem()

    随机返回并删除字典中的一对键和值(一般删除末尾对)。

    如果字典已经为空,却调用了此方法,就报出KeyError异常。

    有返回值的元组

    dict = {'id': 31602312, 'name': 'Tom', 'age': 18}
    print(dict.popitem())
    key,value = dict.popitem()
    print(dict)
    print(key,value)
    
    
    ('age', 18)
    {'id': 31602312, 'name': 'Tom'}
    age 18
    
  • del dict

  • dict = {'id': 31602312, 'name': 'Tom', 'age': 18}
    del dict['age']
    print(dict)
    
    {'id': 31602312, 'name': 'Tom'}
    

将整个字典以及字典结构删除(释放其所占内存)彻底删除

dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
del dict1
print(dict1)

报错
  • dict.clear() 将整个字典内容删除

    dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
    dict1.clear()
    print(dict1)
    
    {}
    

  • 直接修改

    若不存在此key值,默认添加键值对

dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
dict1['id'] = 31602311
print(dict1)

{'id': 31602311, 'name': 'Tom', 'age': 18}
dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
dict1['hoppy'] = 'eating'
print(dict1)

{'id': 31602312, 'name': 'Tom', 'age': 18, 'hoppy': 'eating'}
  • dict1.setdefault()

    • 键存在,不改动,返回字典中的值

    • 键不存在,在字典中添加相应的键值对,并返回对应的值

    • dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
      dict1.setdefault('id', '31602311')
      print(dict1)
      
      {'id': 31602312, 'name': 'Tom', 'age': 18}
      
dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
dict1.setdefault('hobby', 'eat')
print(dict1)

{'id': 31602312, 'name': 'Tom', 'age': 18, 'hobby': 'eat'}

  • 字典值的访问

    只能通过key访问value,不能通过索引位置访问

dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
print(dict1['id'])

31602312

若键不存在,直接报错

dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
print(dict1['job'])

报错
  • dict.get()访问valve

    • 语法格式 dict.get(key[,default])

    • 不能确定字典中是否存在某个键而又想对其进行操作,比如获取值(get方法)

    • 当key不存在的时候,不会抛出异常,返回none

      dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
      print(dict1.get('id',31602333))
      print(dict1.get('salary'))
      print(dict1)
      
      31602312
      None
      {'id': 31602312, 'name': 'Tom', 'age': 18}
      

遍历

  • dict.keys() 返回key值
dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
for key in dict1.keys():
    print(key, end=' ')
    
id name age 
  • dict.values() 返回value值
dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
for value in dict1.values():
    print(value, end=' ')
    
31602312 Tom 18 
  • dict.items() 返回key:value值
dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
for item in dict1.items():
    print(item, end=' ')

('id', 31602312) ('name', 'Tom') ('age', 18) 
dict1 = {'id': 31602312, 'name': 'Tom', 'age': 18}
for key, value in dict1.items():
    print(key, ":", value)
    
id : 31602312
name : Tom
age : 18
  • 小练习

    将以下列表进行分类,返回到字典

    li = [23, 34, 45, 56, 67, 33, 22, 54, 66, 87, 98, 21]
    # 返回
    # {'>=60':[],'<60':[]}
    
li1 = []
li2 = []
for i in li:
    if i >=60:
        li1.append(i)
    else:
        li2.append(i)
dic = {'>=60':li1,'<60':li2}
print(dic)

{'>=60': [67, 66, 87, 98], '<60': [23, 34, 45, 56, 33, 22, 54, 21]}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值