python学习 -- 字典

# 字典的定义:

Python 中使用花括号,保存key-value形式表示字典。

key-value 中的 key 必须是一个可哈希的对象,可以使用 hash() 函数来判断数据是否可哈希。 简单理解在一次程序运行结束前,无论该数据什么时候执行hash()函数,都能得到一个唯一确定的值。 一般情况下,不可变对象数据,都可以得到一个哈希值。 所以,理论上,pyhton中的不可变对象数据都可以做为key使用。 但是,为了方便使用,大多数情况下,都会使用字符串类型数据做为key使用。

# 创建字典:

字面量定义:

a = {}
b = {"name": "jason"}
print(type(a), a)  # <class 'dict'> {}
print(type(b), b)  # <class 'dict'> {'name': 'jason'}

构造方法定义:

a = dict(name="jason", age=18)
b = dict([("name", "jason"), ("age", 18)])
c = dict({"name": "jason", "age": 18})
d = dict((("name", "jason"), ("age", 18)))
e = dict([("name", "jason"), ["age", 18]])
f = dict({"name": "jason"}, age=18)
g = dict(zip(["name", "age"], ["jason", 18]))
print(a)  # {'name': 'jason', 'age': 18}
print(b)  # {'name': 'jason', 'age': 18}
print(c)  # {'name': 'jason', 'age': 18}
print(d)  # {'name': 'jason', 'age': 18}
print(e)  # {'name': 'jason', 'age': 18}
print(f)  # {'name': 'jason', 'age': 18}
print(g)  # {'name': 'jason', 'age': 18}

# 访问字典数据:xx[key]

a = dict(name="jason", age=18)
print(a["name"])  # jason

# 添加/修改字典数据:xx[key] = value ;如果key已经存在于字典中,则更新key对应的值为value,如果key不存在于字典中,则创建一个新的键值对:key=value;

a = dict(name="jason", age=18)
a["name"] = "erica"
a["gender"] = "F"
print(a)  # {'name': 'erica', 'age': 18, 'gender': 'F'}

# 删除字典元素: del xx[key] ; 同列表;

a = dict(name="jason", age=18)
del a["age"]
print(a)  # {'name': 'jason'}

字典的有序性:(Python 3.7+)

在Python 3.7及更高版本中,字典被认为是有序的,即它们可以保持键值对的添加顺序。这意味着当遍历字典或打印字典时,键值对的顺序与它们添加到字典中的顺序相同。这种有序性是字典的内置特性,不需要额外的操作。

然而,在Python 3.6及更早版本中,字典是无序的,无法保持键值对的顺序。这意味着当遍历字典或打印字典时,键值对的顺序是不确定的,可能与它们添加到字典中的顺序不同。

因此,如果在编程中需要依赖字典键值对的顺序,建议使用Python 3.7及更高版本以确保有序性。如果使用旧版本的Python,可以考虑使用collections.OrderedDict来实现有序字典的功能。

字典的应用场景:

  • 字典适用于存储具有相关性的数据,如用户信息、学生成绩等。每个键值对表示一个独立的数据项,通过键来关联对应的值。
  • 字典提供了快速查找和访问数据的能力,通过键可以直接定位对应的值,而不需要遍历整个字典。这使得字典在需要根据特定键快速获取对应值的场景下非常有用。
  • 字典作为数据的容器,提供了丰富的操作方法,可以方便地进行遍历、搜索、插入和删除操作。可以通过循环遍历字典的键或值,通过键进行搜索和更新数据,通过键值对的添加和删除来动态修改字典的内容。这种灵活性使得字典成为处理各种数据结构的重要工具。

字典操作:

# key() 方法:用俩获取字典中的所有key,将其保存到一个列表中,以dict_keys 类型返回;

a = dict(name="jason", age=18)
print(a.keys())  # dict_keys(['name', 'age'])

# values() 方法:同上面的key() 方法,将字典的所有values保存到一个列表中,以dict_values 类型返回;

a = dict(name="jason", age=18)
print(a.values())  # dict_values(['jason', 18])

# items() 方法:获取字典中的所有键值对,将每个键值对以元组形式保存,将所有的键值对元组保存在一个列表中,以dict_titems形式返回;

a = dict(name="jason", age=18)
print(a.items())  # dict_items([('name', 'jason'), ('age', 18)])

# get() 方法:获取指定key的value值,如果指定的key不存在,则会返回默认值,用法:xx.get(key, default);

a = dict(name="jason", age=18)
print(a.get("name"))  # jason
print(a.get("gender"))  # None
print(a.get("gender", "M"))  # M

# setdefalut() 方法:给一个不存在的key添加默认值,并将该键值对保存到字典中,在一些场景下,字典的key存在,但是该key却没有对应的值,此时,就可以使用该方法,为当前的key添加一个默认值。比如服务端要保存客户端发起请求时携带的请求头中的信息,用法:xx.setdefault(key, default);

a = dict(name="jason", age=18)
a.setdefault("gender")
print(a)  # {'name': 'jason', 'age': 18, 'gender': None}
a.setdefault("city", "shanghai")
print(a)  # {'name': 'jason', 'age': 18, 'gender': None, 'city': 'shanghai'}

# fromkeys() 方法:用于创建一个新字典,以keys中的元素作为字典的键,value作为字典中所有键的初始值,默认为None;该方法是一个静态方法,需要使用字典类型名 dict 调用。 该方法如果给给定 keys 参数,则所有的key对应值都为默认值 None,如果给定 val值,则所有key对应的值为 val,用法:dict.fromkeys(keys, value);

a = ["name", "age"]
b = dict.fromkeys(a)
print(b)  # {'name': None, 'age': None}
c = dict.fromkeys(a, "default")
print(c)  # {'name': 'default', 'age': 'default'}

# update() 方法:使用参数中的数据更新当前字典;该方法的参数可以接收一个字典(大多数的使用方式),也可以接收一个可迭代对象,如果参数数据中的key在当前字典中存在,则使用新值更新字典中的键值对,如果参数数据中的key在当前字内中不存在,则将键值对添加到当前字典中;

a = dict(name="jason", age=18)
b = {"gender": "M"}
a.update(b)
print(a)  # {'name': 'jason', 'age': 18, 'gender': 'M'}
c = [("name", "erica"), ("age", 20)]
a.update(c)
print(a)  # {'name': 'erica', 'age': 20, 'gender': 'M'}

# popitem() 方法:获取并删除字典中的最后一个键值对,将被删除的键值对作为一个元组返回,如果字典为空,则会报错;

a = dict(name="jason")
print(a.popitem())  # ('name', 'jason')
print(a)  # {}
a.popitem()  # KeyError: 'popitem(): dictionary is empty'
print(a)

# pop() 方法:用于过去并删除字典中指定key的键值对,如果key不存在,则会报错;

a = dict(name="jason",age=18)
a.pop("age")
print(a)  # {'name': 'jason'}
a.pop("age")  # KeyError: 'age'
print(a)

# clear() 方法:清空字典;

a = dict(name="jason",age=18)
a.clear()
print(a)  # {}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值