python学习——字典

当索引行不通时,使用字典。
字典是python中唯一的内置映射类型,其中的值不按顺序排列,而是存储在键下。键可能是数、字符串、元组。这种通过名称来访问其各个值的数据结构叫做映射。

一、为什么要使用字典?

# 当有了姓名名单
names = ['alice', 'beth', 'cecil', 'de']
# 现在要创建一个小型数据库,用来存储这些人的电话号码
numbers = ['1234', '2341', '3412', '4123']
# 查找某个人的电话号码
print(numbers[names.index('cecil')])
# 可以看到很麻烦,所以就需要用到字典

二、创建和使用字典

字典由键及其相应的值组成,这种键-值对成为项。
每个键与其值之间都用冒号分隔。项之间用逗号分隔,而整个字典放在{}内。

# 字典的创建
phonebook = {'alice': 1234, 'beth': 2341, 'cecil': 3412}
print(phonebook['cecil'])
# ---------------
# 3412

# 函数dict,从其他映射或键-值对序列创建字典
items = [('name', 'Gumby'), ('age', 42)]
d = dict(items)
print(d)

# 还可以使用关键字实参来调用这个函数
di = dict(name="Gumby", age=42)
print(di)
# ---------------
# {'name': 'Gumby', 'age': 42}
# {'name': 'Gumby', 'age': 42}
# 一个简单的数据库

# 一个将人名用作键和字典。每个人都用一个字典表示,
# 字典包含键'phone'和'addr',它们分别与电话号码和地址相关联
people = {
    'alice': {
        'phone': 1234,
        'addr': 'js'
    },

    'beth': {
        'phone': 2341,
        'addr': 'bj'
    },

    'cecil': {
        'phone': 3412,
        'addr': 'sh'
    }
}

# 电话号码和地址的描述性标签,供打印输出时使用
labels = {
    'phone': 'phone number',
    'addr': 'address'
}

name = input('Name:')

# 要查找电话号码还是地址
request = input('phone number(p) or address(a):')

# 使用正确的键
if request == 'p':
    key = 'phone'
if request == 'a':
    key = 'addr'

# 仅当名字是字典包含的键时才打印信息
if name in people:
    print("{}'s {} is {}".format(name, labels[key], people[name][key]))

# ---------------
# 测试一下
# Name:cecil
# phone number(p) or address(a):p
# cecil's phone number is 3412

2.2字典方法

# 字典方法
phonebook = {}
# 自动添加字典项,当字典中没有该项时会自动添加
phonebook['alice'] = 4321
print(phonebook)
# 1、clear,删除所有字典项
x = {}
y = x  # 此时x和y都指向同一个字典
x['key'] = 'value'
# 如果使用clear来清空x,则y也是空的。
# x.clear()
# 如果想要清空x,但是保留y,如下操作。
x = {}
print("y不为空:", y)
phonebook.clear()
print('clear:', phonebook)
# {'alice': 4321}
# y不为空: {'key': 'value'}
# clear: {}

# 2、copy,返回一个新字典,内容与原来字典相同。
# 该方法是浅赋值,因为值本身是原件,而非副本
a = {'username': 'admin'}
b = a.copy()
print('copy:', b)
# 当b改变时,a不会变化
b['username'] = 'leo-zu'
print('改变b后,a没有变化:', a)
# copy: {'username': 'admin'}
# 改变b后,a没有变化: {'username': 'admin'}

# 3、fromkeys,创建一个新字典,其中包含指定的键,且每个键对应的值都是None
a = {}.fromkeys(['name', 'age'])
print('fromkeys:', a)
# fromkeys: {'name': None, 'age': None}

# 4、get,访问字典项提供了宽松的环境
# 如果通过键值来访问字典中没有的项,会报错
d = {}
# print(d['name'])
# KeyError: 'name'
# 使用get方法不会
print('get:', d.get('name'))
# get:None

# 5、items,返回一个包含所有字典项的列表
# 其中每个元素都为(key, value)的形式,但顺序不确定
# 返回值属于字典视图的特殊类型
d = {'title': 'python', 'url': 'http://***.com'}
print('items:', d.items())
# items: dict_items([('title', 'python'), ('url', 'http://***.com')])

# 6、keys,返回一个字典视图,其中包含指定字典中的键
print('keys:', d.keys())
# keys: dict_keys(['title', 'url'])

# 7、pop,用于获取与指定键相关联的值,并将该键值对从字典中删除
p = d.pop('title')
print('pop:', p)
print('pop后的字典:', d)
# pop: python
# pop后的字典: {'url': 'http://***.com'}

# 8、popitem,类似list.pop。但list.pop弹出列表中的最后一个元素
# 而popitem随机地弹出一个字典项,因为字典的顺序是不确定的
d = {'title': 'python', 'url': 'http://***.com', 'spam': 0}
pitem = d.popitem()
print('popitem:', pitem)
# popitem: ('spam', 0)

# 9、setdefault,有点像get,因为它也获取与指定键相关联的值。
# 但除此之外,它还在字典不包含指定键时,在字典中添加指定的键值对
d = {}
p = d.setdefault('name', 'N/A')
print('setdefault:', p)
d.setdefault('title')
print('字典中不包含指定键时,setdefault:', d)
# setdefault: N/A
# 字典中不包含指定键时,setdefault: {'name': 'N/A', 'title': None}

# 10、update,使用字典中的项来更新另一个字典
# 将x中的键值对添加到d中去
d = {'title': 'python'}
x = {'name': 'study'}
d.update(x)
print('update:', d)
# update: {'title': 'python', 'name': 'study'}

# 11、values,返回一个由字典中的值组成的字典视图
# 不同于方法keys,方法values返回的视图可能包含重复的值
# 键是不可以重复的,但是值可以
d = {'a': 1, 'b': 2, 'c': 1}
print('values:', d.values())
# values: dict_values([1, 2, 1])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值