前言

字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字、字符串、元组,这种结构类型也称之为映射。字典类型是Python中唯一內建的映射类型。

注意,浮点数比较很不精确,因此千万不要用浮点数作为key!

内置方法

python字典包含了11个内置方法,具体如下:

序 号  函数 描述
1 clear(self)  删除字典内所有的元素
2 copy(self) 返回一个字典的浅copy ,俗称赋值
3 fromkeys(*args,**kwargs) 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
4 get(self,k,d=None)  返回指定键的值,如果值不在字典中返回default值
5 items(self) 以列表返回可遍历的(键, 值) 元组数组
6 keys(self)  以列表返回一个字典所有的键
7 pop(self,k,d=None)  删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值
8 popitem(self)  随机返回并删除字典中的一对键和值
9 setdefault(self,k,d=None)  和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
10 update(self,E=None,**F)  把self的东西更新到外面字典
11 values(self)  以列表返回字典中的所有值

具体举例子解释如下:

1,字典的键不能是list类型:

list = [1,2,3,4]
info2 = {list:'number'}

结果:
Traceback (most recent call last):
  File "D:/字典.py", line 2, in <module>
    info2 = {list:'number'}
TypeError: unhashable type: 'list'

2,list/set/dict 均不可被哈希  ,int、float、str、tuple:是可以哈希的

1 list.__hash__;
    #结果为None
2 set.__hash__;
    #结果为None
3 dict.__hash__;
    #结果为None
4 print(int.__hash__);
    # <slot wrapper '__hash__' of 'int' objects>
5 print(float.__hash__);
    #<slot wrapper '__hash__' of 'float' objects>
6 print(str.__hash__);
    #<slot wrapper '__hash__' of 'str' objects>
7 print(tuple.__hash__);
    #<slot wrapper '__hash__' of 'tuple' objects>

 3,增

info ={'name':'jamnes','age':'32','work':'basketplayer'}
info['sex'] = 'fale'
print(info)
结果:
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'sex': 'fale'}

4,删

4-1 pop():删除指定key的键值对

info ={'name':'jamnes','age':'32','work':'basketplayer'}
info.pop('work')
print(info)
结果:
{'name': 'jamnes', 'age': '32'}

4-2 clear():清除所有的键值对

info ={'name':'jamnes','age':'32','work':'basketplayer'}
info.clear()
print(info)
结果:
{}

4-3setdefault():删除指定的元素,如果没有,则返回none

info ={'name':'jamnes','age':'32','work':'basketplayer'}
info.setdefault('son')
print(info)
结果:
None

5,改

info ={'name':'jamnes','age':'32','work':'basketplayer'}
info['age']='33'
print(info)
结果:
{'name': 'jamnes', 'age': '33', 'work': 'basketplayer'}

6,查

6-1 get():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None

info ={'name':'jamnes','age':'32','work':'basketplayer'}
a =info.get('age')
print(a)
结果:
32

6-2 setdefault():通过给定的key,查找对应的value,如果给定的可以在字典中无,则返回None,
      同时在字典中增加'test': None键值对

info ={'name':'jamnes','age':'32','work':'basketplayer'}
a =info.setdefault('age')
print(a)
print(info)
b =info.setdefault('sex')
print(b)
print(info)

结果:
32
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer'}
None
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'sex': None}

7,更新

7-1update()=

一,更新里面有的信息,就是改变
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info2 = {'name':'wade','age':'33','work':'basketplayer'}
info.update(info2)
print(info)
结果:
{'name':'wade','age':'33','work':'basketplayer'}

二,更新里面没有的信息,就是添加
info ={'name':'jamnes','age':'32','work':'basketplayer'}
info2 = {'honor':'3 champions'}
info.update(info2)
print(info)
结果:
{'name': 'jamnes', 'age': '32', 'work': 'basketplayer', 'honor': '3 champions'}

8,返回键,值,键值对

  keys():以列表(list)返回字典中的所有键(key),字典是无序的,所以这个list返回的不是定义字典的顺序

  values():以列表(list)返回字典中的所有值,这个list的顺序跟keys()返回的list顺序是一一对应的

  items():以列表(list)返回可遍历的(键, 值) 元组数组,这个tuple的list包含了dictionary的所有数据

dict ={'k1':'v1','k2':'v2','k3':'v3'}
#1,请循环遍历除所有的key
for keys in dict.keys():
    print(keys)

#遍历出所有的value
for value in dict.values():
    print(value)

#遍历出
for key,value in dict.items():
    print(key+':'+value)<br>#结果:<br>k1<br>k2<br>k3<br>v1<br>v2<br>v3<br>k1:v1<br>k2:v2<br>k3:v3

9,练习字典

  dic={'k1':"v1","k2":"v2","k3":[11,22,33]}

  a.请循环输出所有的key

  b.请循环输出所有的value

  c.请循环输出所有的key和value

  d.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典

  e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典

  f.请在k3对应的值中追加一个元素44,输出修改后的字典

  g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典

dic={'k1':"v1","k2":"v2","k3":[11,22,33]}
#   a.请循环输出所有的key
for i in dic :
    print(i)
for i in dic.keys():
    print(i)
#   b.请循环输出所有的value
for i in dic.values():
    print(i)
  c.请循环输出所有的key和value
for i,j in dic.items():
    print(i,j)
#   d.请在字典中添加一个键值对,"k4":"v4",输出添加后的字典
dic2 = {'k4':'v4'}
dic.update(dic2)
print(dic)
dic['k4'] = 'v4'
print(dic)

#   e.请在修改字典中“k1”对应的值为“alex”,输出修改后的字典
dic['k1'] ='alex'
print(dic)
  f.请在k3对应的值中追加一个元素44,输出修改后的字典
dic['k3'].append(44)
print(dic)
#   g.请在k3对应的值的第1个位置插入个元素18,输出修改后的字典
dic['k3'].insert(0,18)
print(dic)

10,根据字典的键值进行排序  

  反序: reverse = True

mylist = ['学习', '工作', '玩耍', '学习', '工作', '工作']
print(mylist)
# list_element 是另外一个列表,里面的内容是list_element里面的无重复项
myset = set(mylist)

mydict = {}

for item in myset:
    res = mylist.count(item)
    sample = {item: res}
    # print(res)
    # print("the %d has found %d" % (item, mylist.count(item)))
    mydict.update(sample)
print(mydict)
print(sorted(mydict.items(), key=lambda mydict:mydict[1],reverse=True))

11,OrderedDict 的使用

  在Python中,dict这个数据结构由于hash的特性,是无序的,这在有时候会给我们带来一些麻烦,幸运的时,在collections模块中为我们提供了 OrderedDict ,当你需要获取一个有序的字典对象时,试用它即可。

  python中的字典(dict)对象可使用“键”,“值” 对的形式存取值,但默认的内置类型字典中的元素是无序的。Collections模块下的OrderedDict类实现了对字典的排序,OrderedDict是dict的一个子类,实现了对字典排序的功能,下面看一下两者数据类型的对比。

from collections import OrderedDict

print('Normal Dictionary:')
d = {}
d['name'] = 'v1'
d['age'] = 'v2'
d['job'] = 'v3'
d['address'] = 'v4'

d1 = {}
d1['job'] = 'v3'
d1['address'] = 'v4'
d1['name'] = 'v1'
d1['age'] = 'v2'

print(d)
print(d1)
print(d == d1)

print('OrderedDict:')
d2 = OrderedDict()
d2['name'] = 'v1'
d2['age'] = 'v2'
d2['job'] = 'v3'

d3 = OrderedDict()
d3['job'] = 'v3'
d3['age'] = 'v2'
d3['name'] = 'v1'

print(d2)
print(d3)
print(d2 == d3)

  输出结果:

Normal Dictionary:
{'name': 'v1', 'age': 'v2', 'job': 'v3', 'address': 'v4'}
{'job': 'v3', 'address': 'v4', 'name': 'v1', 'age': 'v2'}
True
OrderedDict:
OrderedDict([('name', 'v1'), ('age', 'v2'), ('job', 'v3')])
OrderedDict([('job', 'v3'), ('age', 'v2'), ('name', 'v1')])

False

从结果来看,如果是普通的字典,即使传入的顺序不一样,但是依然是相同的字典;如果是OrderedDict ,传入的顺序不一样,那么得到的字典是不一样的。

python字典操作方法详解的更多相关文章

  1. python 字典操作方法详解

    字典是一种通过名字或者关键字引用的得数据结构,key 类型需要时被哈希,其键可以是数字.字符串.元组,这种结构类型也称之为映射.字典类型是Python中唯一內建的映射类型. 注意,浮点数比较很不精确, ...

  2. python 字符串操作方法详解

    字符串序列用于表示和存储文本,python中字符串是不可变对象.字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单,双或三引号中间包含的内容称之为字符串.其中三引号可以由多行组成,编写 ...

  3. python 列表操作方法详解

    列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表是一个数据的集合,集合内可以放任何数据类型,可对集合方便的增删改查操作.Python已经内置确定序列的长度以及确定最大和最 ...

  4. python 集合操作方法详解

    说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球 的人都有哪些? play_basketball = ['a','b','c','d','e'] pl ...

  5. Python - 字典(dict) 详解 及 代码

    字典(dict) 详解 及 代码 本文地址: http://blog.csdn.net/caroline_wendy/article/details/17291329 字典(dict)是表示映射的数据 ...

  6. Python——字典dict()详解

    一.字典 字典是Python提供的一种数据类型,用于存放有映射关系的数据,字典相当于两组数据,其中一组是key,是关键数据(程序对字典的操作都是基于key),另一组数据是value,可以通过key来进 ...

  7. python字符串操作方法详解

      字符串 字符串序列用于表示和存储文本,python中字符串是不可变对象.字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,一对单,双或三引号中间包含的内容称之为字符串.其中三引号可以由多 ...

  8. python列表操作方法详解

      列表 列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表是一个数据的集合,集合内可以放任何数据类型,可对集合方便的增删改查操作.Python已经内置确定序列的长度以及确 ...

  9. python集合操作方法详解

    前言 说集合之前,我们先说一个小例子,假设某公司有五个人喜欢打篮球,五个人喜欢打游戏,问即打游戏有打篮球的人都有哪些? play_basketball = ['a','b','c','d','e'] ...

随机推荐

  1. Vue-移动端开发全家桶

    内容:node.js,vue-cli,vuex,axios,postcss-pxtorem,lib-flexible,vant ,babel-plugin-import 1.安装脚手架工具: npm ...

  2. (matlab)自定义图像(matlab)

    clc;clear all;A=[0 230 255 60 30 100];A=uint8(A);imshow(A,'InitialMagnification','fit') 如图: clc;clea ...

  3. springboot1.5.9 整合单机版redis3.2.8

    redis是一种可基于内存也可基于持久话的日志型.key-value数据库.因为性能高,存储数据类型丰富等优势常被用作数据缓存. 我们利用spring-boot-autoconfiguration.j ...

  4. NUMPY的学习之路(2)——索引,合并,分割,赋值

    一.索引 1.1numpy数组的转置 A=np.arange(3,15).reshape(3,4) print(A) print(A[2][0]) print(A[2,1]) print(A[2,:] ...

  5. 推荐一个手机端切换地址gps的app

    在写脚本的时候遇到的 客户提供了这个app 免费 自身可以防检测 苹果和安卓都可以使用   官网 http://www.daniu.net/   搜索 大牛 或者danniu即可

  6. iCCID激活终结,苹果iPhone卡贴机“辉煌”时代落幕

       iPhone卡贴机,是一个神奇的存在.所谓的iPhone卡贴机,原本是"有锁机".它们通常是国外运营商的合约机,为了限制使用地域而"上锁",不能直接在国内 ...

  7. c# 异常:值不能为 null。 参数名: source

    异常详细信息: System.ArgumentNullException: 值不能为 null.参数名: source 其实问题那就出在 Select() 方法,在 Select 上按 F12 查看定 ...

  8. 2019 EIS高校安全运维赛 misc webshell

    webshell 第一种思路: 1.菜刀都是http协议,发的包都是POST包,所以在显示过滤器下命令:http.request.method==POST 2.右键,追踪tcp流,发现是蚁剑流量 3. ...

  9. js的split() 方法和join()方法

    定义和用法 split() 方法用于把一个字符串分割成字符串数组. String.split() 执行的操作与 Array.join 执行的操作是相反的. join() 方法用于把数组中的所有元素放入 ...

  10. 基于MHA的MYSQL高可用方案

    一.MHA 简介 MHA (Master High Availability )目前在 MySQL 高可用方面是一个相对成熟的解决方案,它由日本 DeNA 公司的 youshimaton 员工(现就职 ...