Python字典

字典概述

如果把一系列值组合成数据结构通过编号访问各个值,列表很好用。除了列表外也可以通过名称来访问各个值的数据结构。这种数据结构叫做映射。字典是python中唯一的内置映射类型。

字典的用途

字典就是能够快速轻松地找到特定的单词(键),以获悉其定义(值)。

创建和使用字典

形如这样就是字典

phonebook={'tom':'1001','jenny':'1002','david':'1003'}
print(phonebook['tom'])

1001

Process finished with exit code 0

字典由及其相应的组成,这种键-值对称为
在字典中,键必须是独一无二的,而字典的值无需如此。

函数dict

可以使用函数dict从其他键值对序列创建字典。

items = [('name','tom'),('age',41)]
d = dict(items)
print(d)
print(d['name'])

{'name': 'tom', 'age': 41}
tom

Process finished with exit code 0

基本的字典操作

字典的基本行为在很多方面都类似于序列
len(d):返回字典d包含的项数
d[k]:返回与键k相关联的值
d[k]=v:将值v关联到键k
del d[k]:删除键为k的项
k in d:检查字典d是否包含键为k的项
字典也有不同与列表的地方
键的类型:字典中的键可以是整数,也可以不是整数。
自动添加:字典中原本没有键,也可以给他赋值,这将在字典中创建一个新项。
成员资格: 表达式k in d查找的是键而不是值,而表达式v in l查找的是值而不是索引。

examples:

people = { 1111',
        'addr':'xinshengdasha'
    },
    'leesen':{
        'phone':'2222',
        'addr':'taiyuehefu'
    },
    'driven':{
        'phone':'3333',
        'addr':'huayuandonglu'
    }
}
lables={
    '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,lables[key],people[name][key]))

name:jax
phone number(p) or address (a)?a
jax's address is xinshengdasha.

Process finished with exit code 0

字符串格式设置功能用于字典

可使用字符串格式设置功能来设置值的格式,这些值是作为命令或非命名参数提供方法format的。也可以通过字典中存储一些列命名的值,可让格式设置更容易。

phonebook={'tom':'1001','jenny':'1002','david':'1003'}
print("tom's number is {tom}.".format_map(phonebook))

tom's number is 1001.

Process finished with exit code 0

字典的方法

clear

方法clear删除所有的字典项,无法回结果。

d={}
d['name']='tom'
d['age']=18
print(d)
return_value=d.clear()
print(d)
{'name': 'tom', 'age': 18}
{}

Process finished with exit code 0

copy

方法copy返回一个新字典,包含的键值对与原来的字典相同(这个方法是浅复制,因为值本省就是原件,而非副本)

x={'username':'admin','machines':['foo','bar','baz']}
y=x.copy()
y['username']='tom'
y['machines'].remove('bar')
print(y)
print(x)
{'username': 'tom', 'machines': ['foo', 'baz']}
{'username': 'admin', 'machines': ['foo', 'baz']}

Process finished with exit code 0

修改副本的值,原件也将发生变化,因为原件指向的也是被修改的值。
为了避免这个问题,一种方法是深复制,同时复制值和包含的所有值,copy模块中的函数deepcopy

from copy import deepcopy
d = {}
d['name']=['tom','herry']
c=d.copy()
dc=deepcopy(d)
d['name'].append('jerry')
print(c)
print(dc)
{'name': ['tom', 'herry', 'jerry']}
{'name': ['tom', 'herry']}

Process finished with exit code 0

fromkeys

方法fromkeys创建一个新字典,其中包含指定的键,并且每个键对应的值都是None。

print({}.fromkeys(['name','age']))

{'name': None, 'age': None}

Process finished with exit code 0

examples:

print(dict.fromkeys(['name','age']))
{'name': None, 'age': None}

Process finished with exit code 0

get

方法get为访问字典项提供了宽松的环境,通常,如果试图访问字典中没有的项,将会出现语法错误。

example:

d={}
print((d['name']))
    print((d['name']))
KeyError: 'name'

example:

d={}
print(d.get('name'))
None

Process finished with exit code 0

example:

people = {
    'jax':{
        'phone':'1111',
        'addr':'xinshengdasha'
    },
    'leesen':{
        'phone':'2222',
        'addr':'taiyuehefu'
    },
    'driven':{
        'phone':'3333',
        'addr':'huayuandonglu'
    }
}
labels={
    'phone':'phone number',
    'addr':'address'
}
name= input('name:')
request=input('phone number(p) or address(a)')
key=request
if request=='p':key ='phone'
if request=='a':key='addr'
person=people.get(name,{})
label=labels.get(key,key)
result=person.get(key,'not available')
print("{}'s {} is {}.".format(name,label,result))
name:jax
phone number(p) or address(a)f
jax's f is not available.

Process finished with exit code 0

items

方法items返回一个包含所有字典项的列表,其中每个元素都为(key,value)的形式。字典项在列表中的排列顺序不确定。

d={'title':'python web site','url':'www.python.org','language':'py'}
print(d.items())
dict_items([('title', 'python web site'), ('url', 'www.python.org'), ('language', 'py')])

Process finished with exit code 0

keys

方法keys返回一个字典试图,其中包含指定字典中的键。

pop

方法pop可用于获取与指定键相关联的值,并将该键值对从字典中删除。

d={'x':1,'y':2}
d.pop('x')
print(d)

{'y': 2}

Process finished with exit code 0

popitem

方法popitem类似于list.pop,但是list.pop弹出列表中的最后一个元素,而popitem随机地弹出一个字典项,因为字典项的顺序是不确定的,没有最后一个元素的概念。

d={'url':'www.python.org','laguage':'py','title':'python web site'}
d.popitem()
print(d)

{'url': 'www.python.org', 'laguage': 'py'}

Process finished with exit code 0

setdefault

方法setdefault类似get,他也获取与指定键相关联的值,但除此之外,setdefault还在字典不包含指定的键时,在字典中添加指定的键值对。

d={}
d.setdefault('name','none')
print(d)
d['name']='tom'
print(d.setdefault('name','none'))
print(d)
{'name': 'none'}
tom
{'name': 'tom'}

Process finished with exit code 0

update

方法update使用一个字典中的项来个更新另一个字典。

d={
    'tile':'python web site',
    'url':'www.python.org',
    'langeage':'py'
}
x={'title':'python language website'}
d.update(x)
print(d)

{'tile': 'python web site', 'url': 'www.python.org', 'langeage': 'py', 'title': 'python language website'}

Process finished with exit code 0

values

方法values返回一个由字典的值组成的字典视图。不同于方法keys,方法values返回的视图可能包含重复值。

d={}
d[1]=1
d[2]=2
d[3]=3
d[4]=1
print(d.values())
dict_values([1, 2, 3, 1])

Process finished with exit code 0

总结

  • 映射:映射能够使用任何不可变的对象来标识其元素。python只有一种内置的映射类型-字典
  • 字符串格式设置功能用于字典,要对字典执行字符串格式设施操作,不能使用format和命名参数,而必须使用format_map
  • 字典方法。

思维导图

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Energet!c

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值