字典

字典

思考:

场景1

如果有列表

li = ['Pyhton', 'Java', 'C++'];

需要对"pyhton"这个名字写错了,通过代码修改:

li[0] = "Python"

如果列表的顺序发生了变化,如下

li = ['Java', 'C++', 'Pyhton'];

此时就需要修改下标,才能完成名字的修改

li[2] = "Python"

有没有方法,既能存储多个数据,还能在访问元素的很方便就能够定位到需要的那个元素呢?

答:

​ 字典

场景2:

学生信息列表,每个学生信息包括学号、姓名、年龄等,如何从中找到某个学生的信息?

>>> studens = [[201801, "张三", 18], [201802, "李四", 19], [201803, "王二",17], ...]

循环遍历? 这样很麻烦。

实际生活中,我们还经常使用汉语字典,英汉词典等等。

程序中的字典:

info = {"usrname":"Lilei", "age": 18, "Class": "one"}

字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。字典是一种可变数据类型,且可存储任意类型对象。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

格式:

{key1:value1,key2:value2,.....}

描述:

​ 1.键-值对中间用冒号(":")连接;

​ 2.key: value组成字典里的一个元素;

​ 3.键-值对(元素)之间用逗号(",")隔开;

​ 4.整个字典用花括号"{}"包裹起来。

1.字典的创建

1)创建一个空字典

dict = {}
type(dict)

2)创建一个有多个值的字典

1.直接赋值法:d = {key1 : value1, key2 : value2 },如

>>> info = {"usrname":"Lilei", "age": 18, "Class": "one"}
>>> info
{'usrname': 'Lilei', 'age': 18, 'Class': 'one'}

拓展:

>>> key1 = "name"
>>> value1 = "Tom"
>>> key2 = "age"
>>> value2 = 18
>>> d = {key1 : value1, key2 : value2 }
>>> d
{'name': 'Tom', 'age': 18}
>>>


2.通过函数创建字典(强制转换):

# 法1
>>> info = dict(usrname = "Lilei", age = 18, Class = "one")
>>> info
{'usrname': 'Lilei', 'age': 18, 'Class': 'one'}
# 法2
>>> info = dict([['name', 'LiLei'], ['age', 18]])
>>> info
{'name': 'LiLei', 'age': 18}
# 法3
>>> info = dict((('name', 'LiLei'), ('age', 18)))
>>> info
{'name': 'LiLei', 'age': 18}
# 法4
>>> info = dict([('name', 'LiLei'), ('age', 18)])
>>> info
{'name': 'LiLei', 'age': 18}
# 法5
>>> info = dict((['name', 'LiLei'], ['age', 18]))
>>> info
{'name': 'LiLei', 'age': 18}
>>>

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

>>> info = dict.fromkeys("Hello")  # 如果没有指定默认值,默认为 None;
>>> info
{'H': None, 'e': None, 'l': None, 'o': None}
>>> info = dict.fromkeys(["Lilei", "Lee", "Jack"], "123456")# 给每个元素设置默认值为 "123456";
>>> info
{'Lilei': '123456', 'Lee': '123456', 'Jack': '123456'}
>>>

2.字典的常见操作

1)字典值的访问(查的一种)

字典是无序的,不能通过索引值来获取值。

>>> info = info[2]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 2
>>>

  • 通过键(key)访问值(value)
    • key 值不存在的时候,会报错。
>>> info = {"usrname":"Lilei", "age": 18, "Class": "one"}
>>> info["usrname"] # 通过关键字访问对应的值
'Lilei'
>>> info["age"]
18
>>> info["usname"]# 没有对应的key,报错
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'usname'

  • 使用get访问值(value)

    不确定字典中是否存在某个键而又想获取其值时,可以使用get方法,还可以设置默认值

    • 当key不存在的,不会抛出异常,返回 None。
>>> info = {"name": "LiLei", "age": 18}
>>> info.get("name")
'LiLei'
# 当key不存在的,不会抛出异常,返回 None
>>> info.get("job")
>>> type(info.get("job"))
<class 'NoneType'>
>>>

2)增

  • 直接添加新键-值对

    在使用 变量名['键'] = 数据 时,这个“键”在字典中,不存在,那么就会新增这个元素:

>>> info = {"name": "LiLei", "age": 18}
>>> info["job"] = "IT"
>>> info
{'name': 'LiLei', 'age': 18, 'job': 'IT'}
>>>

  • dict.update()

    把字典info1的键/值对更新到info里

    • 当两个字典中的键不同时,把info1的键值插入到info中
    • 当两个字典中存在相同键时,info1覆盖info的键值
# 当两个字典完全不相同时
>>> info = {"name": "LiLei", "age": 18}
>>> info1 = {"job": "IT", "salary":10000}
>>> info.update(info1)
>>> info
{'name': 'LiLei', 'age': 18, 'job': 'IT', 'salary': 10000}
>>> info1
{'job': 'IT', 'salary': 10000}
>>>
# 当两个字典存在相同键时,会覆盖前面的键值
>>> info = {"name": "LiLei", "age": 18}
>>> info2 = {"name": "Tom", "salary":10000}
>>> info.update(info2)
>>> info
{'name': 'Tom', 'age': 18, 'salary': 10000}
>>> info2
{'name': 'Tom', 'salary': 10000}
>>>

3)删

  • del dict[keys]
    • 删除指定的元素/键-值对
    • 没有返回值
>>> info = {'name': 'Tom', 'age': 18, 'salary': 10000}
>>> del info["salary"]
>>> info
{'name': 'Tom', 'age': 18}
>>>

  • del dict
    • 删除整个字典
>>> info = {"name": "LiLei", "age": 18}
>>> del info
>>> info
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'info' is not defined
>>>

  • dict.clear()
    • 清空整个字典
>>> info = {"name": "LiLei", "age": 18}
>>> info.clear()
>>> info
{}
>>>

  • dict.pop(keys)
    • 删除指定键-值对
>>> info = {'name': 'Tom', 'age': 18, 'salary': 10000}
>>> info.pop("age")
18
>>> info
{'name': 'Tom', 'salary': 10000}
>>>

  • dict.popitem()
    • 随机删除字典中的一组键值对
    • 有返回值,以元组方式返回
    • 应用不广泛
>>> info = {'name': 'Tom', 'age': 18, 'salary': 10000}
>>> info.popitem()
('salary', 10000)
>>> info
{'name': 'Tom', 'age': 18}
>>>

4)改

字典的每个元素中的数据是可以修改的,只要通过key找到,即可修改

  • 直接修改
>>> info = {'name': 'Tom', 'age': 18, 'salary': 10000}
>>> info["name"] = "LiLei"
>>> info
{'name': 'LiLei', 'age': 18, 'salary': 10000}
>>>

  • dict.setdefault()
    • 键存在,不改动,返回字典中相应的值
    • 键不存在,在字典中添加相应的键值对,并返回相应的值
# 键存在,不改动,返回字典中相应的值
>>> info = {'name': 'Tom', 'age': 18, 'salary': 10000}
>>> info.setdefault("age", 20) # 有返回值
18
>>> info
{'name': 'Tom', 'age': 18, 'salary': 10000}
>>>

# 键不存在,在字典中添加相应的键值对,并返回相应的值
>>> info = {'name': 'Tom', 'age': 18, 'salary': 10000}
>>> info.setdefault("job", "IT") 
'IT'
>>> info
{'name': 'Tom', 'age': 18, 'salary': 10000, 'job': 'IT'}


5)查

  • dict.keys()

    • 返回字典中的所有键(keys)
  • dict.values()

    • 返回字典中的所有值(values)
  • dict.items()

    • 返回字典中的所有键-值对(keys-values)
  • 某元素是否存在:

    • key in dict
      • 存在,True
      • 不存在,False

    Python2中,可以用dict.has_key(),如果key在字典中,返回True;否则,返回False。

>>> info = {'name': 'Tom', 'age': 18, 'salary': 10000}
>>> info.keys()
dict_keys(['name', 'age', 'salary'])

>>> info.values()
dict_values(['Tom', 18, 10000])

>>> info.items()
dict_items([('name', 'Tom'), ('age', 18), ('salary', 10000)])

>>> "age" in info
True
>>> "job" in info
False
>>>

3,字典的遍历

(1)遍历字典的键(key)

info = {"usrname":"Lilei", "age": 18, "Class": "one"}
for key in info.keys():
    print(key, end = " ")

(2)遍历字典的值(value)

info = {"usrname":"Lilei", "age": 18, "Class": "one"}
for value in info.values():
    print(value, end = " ")

(3)遍历所有的项(items)

info = {"usrname":"Lilei", "age": 18, "Class": "one"}
for item in info.items():
    print(item, end = " ")

(4)遍历字典的键-值对(key-value)

info = {"usrname":"Lilei", "age": 18, "Class": "one"}
for key, value in info.items():
    print(key,":", value, end = " ")

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值