字典是通过hash表的原理实现的,每个元素都是一个键值对,通过元素的键计算出一个唯一的哈希值,这个hash值决定了元素的地址,因此为了保证元素地址不一样,必须保证每个元素的键和对应的hash值是完全不同的,并且键的类型必须是不可修改的,所以键的类型可以使数值,字符串常量或元组,但不能是列表,因为列表是可以被修改的。

所以字典具有下列特性:

1、元素的查询和插入操作很快,基本上是常数级别

2、占用内存较大,采用的是空间换时间的方法

参考地址:http://www.cnblogs.com/xianwang/p/4970448.html

字典的初始化

下面的方法都是等价的

d={'a':1, 'b':2, 'c':3}

d=dict({'a':1, 'b':2, 'c':3})

d = dict([('a',1), ('b', 2), ('c', 3)])

d = dict(a=1, b=2, c=3)

d = dict(zip(['a', 'b', 'c'], [1,2,3]))#这个方法也可以用作将两个列表合并成一个字典

赋值元素

1、e = d#引用赋值,e、d始终是一样的

2、e = d.copy()#值赋值,二者是没有关联的

3、d.copy()是一个浅拷贝,当键值对的值遇到字典或者列表时,字典或列表还会随着原来的变化而变化,此时的值相当于元组或列表的引用或指针,而不是其本身,指向的元组或列表其实还是原来的。使用copy模块的deepcopy()方法可以避免这种情况。

import copy

dict1 = {'a': [1, 2], 'b': 3}
dict2 = dict1
dict3 = dict1.copy()
dict4 = copy.deepcopy(dict1) dict1['b'] = 'change'
dict1['a'].append('change') print dict1 # {'a': [1, 2, 'change'], 'b': 'change'}
print dict2 # {'a': [1, 2, 'change'], 'b': 'change'}
print dict3 # {'a': [1, 2, 'change'], 'b': 3}
print dict4 # {'a': [1, 2], 'b': 3}

增加元素

1、d['d'] = 4#直接通过下标添加,如果该键值已存在,那就是修改元素了,当然也可以访问元素

删除元素

1、d.clear()#删除d中的所有元素

2、d.pop('a')#删除键值为‘a’的元素

3、del d['a']#删除键值为‘a’的元素

遍历元素

for k in d:

  print 'd[%s]=' % k,d[k]

for k,v in d.items():

  print 'd[%s]=' % k,v

for k,v in d.iteritems():

  print 'd[%s]=' % k,v

for k,v in d.viewitems():

  print 'd[%s]=' % k,v

items(),iteritems()和viewitems()区别

参考地址:http://www.jb51.net/article/54116.htm

python2.x的 items() 就是返回一个像上面那样的包含dict所有元素的list,但是由于这样太浪费内存,所以后来就加入了(注:在Python 2.2开始出现的)iteritems(), iterkeys(), itervalues()这一组函数,用于返回一个 iterator 来节省内存,但是迭代器不能反映dict在调用这个函数之后的变化。所以就添加了viewitems(),始终代表最新的元素。Python3.x中只有一个items函数,这个函数与2.x中的viewitems()等价。

参考链接:http://www.tuicool.com/articles/rAzQfq

字典合并

1、dd = dict(dict1.items() + dict2.items())

但是这种效率不高,通过上面的分析指导,它实际上是调用items先返回对应的列表,然后执行列表相加,最后再按照列表初始化成字典的形式进行初始化

2、dd = dict(dict1, **dict2)

字典的键必须是字符串。在Python 2(解释器是CPython)中,我们可以使用非字符串作为键,但别被蒙骗了:这种hack只是凑巧在使用标准CPython运行环境的Python 2中才有效。

上面语句相当于

dd = dict1.copy()

dd.update(dict2)

其中的dd.update(dict2)又相当于

for k in dict2

  dd[k] = dict2[k]

可知update的作用不仅可以添加不存在的元素,还能修改已存在的键的元素值。

并且通过上面知道通过update和for...in也是可以合并字典的。

排序

#调用sorted()排序
dict = {"a" : "apple", "b" : "grape", "c" : "orange", "d" : "banana"}
print dict
#按照key排序
print sorted(dict.items(), key=lambda d: d[0])
#按照value排序
print sorted(dict.items(), key=lambda d: d[1]) ls = list(dict.keys())
ls.sort()
for k in ls:
    print(k, dict[k]) for k in sorted(dict.keys()):
   print(k, dict[k])

python dict 字典的更多相关文章

  1. [Python] dict字典的浅复制与深复制

    Python中针对dict字典有两种复制: (1)浅复制:利用 copy() 或者 dict() :复制后对原dict的内部子对象(方括号[]内元素)进行操作时,由浅复制得到的dict会受该操作影响 ...

  2. Python dict字典方法完全攻略(全)

    我们知道,Python 字典的数据类型为 dict,我们可使用 dir(dict) 来查看该类型包含哪些方法,例如: >>> dir(dict)['clear', 'copy', ' ...

  3. Python - dict 字典常见方法

    字典详解 https://www.cnblogs.com/poloyy/p/15083781.html get(key) 作用 指定键,获取对应值 两种传参 dict.get(key):键存在则返回对 ...

  4. Python - dict 字典的多种遍历方式

    前置知识 for 循环详解:https://www.cnblogs.com/poloyy/p/15087053.html 使用 for key in dict 遍历字典 可以使用 for key in ...

  5. Python - DICT 字典排序 - OrderedDict

    官方地址: https://docs.python.org/2/library/collections.html#collections.OrderedDict >>> # regu ...

  6. python dict字典和set集合用法

    创建字典:键  值  key  value c = {'张三':59, '李四':60, '王五':100} #查 print(c['张三'])  #打印张三的成绩 #改 c['张三'] = 60 # ...

  7. python dict字典添加元素

    已存在的字典进行赋值操作 可为该字典添加新元素例子:a = {‘age’: 23, ‘name’: ‘lala}a[school] = ‘nanhaizhongxue’print a>>& ...

  8. python dict字典常用操作

    字典的特性:key唯一无序 '''特性:key唯一:无序''' info = { 'stu1101': "安徽", 'stu1102': "北京", 'stu1 ...

  9. Python dict 字典 keys和values对换

    原字典: d1 = { 'en':'英语', 'cn':'中文', 'fr':'法语', 'jp':'日语' } 经过相互对换: d1_inverse = {values:keys for keys, ...

随机推荐

  1. Java两个线程实现交替运行-以交替打印奇偶数为例

    本文旨在两个线程交替运行,不多哔哔直接看代码吧 public class Work2 { static final Object object = new Object(); public stati ...

  2. AtCoder Regular Contest 100 E - Or Plus Max

    一道很好的dp题 dp[K]存的是 i满足二进制1属于K二进制1位置 最大的两个Ai 这样dp[K]统计的两个数肯定满足(i | j) <= K 然后不断做 update(dp[i | (1&l ...

  3. Python前戏

    1.Python解释器 官网:https://www.python.org/getit/ 因为Python的3.0和2.0版本有所差别,所以根据个人学习方向分别下载安装. 安装验证:打开命令提示符,执 ...

  4. 20145234黄斐《Java程序设计》第二周学习总结

    教材学习内容总结 类型 Java可区分为基本类型(Primitive Type)和类类型(Class Type),其中类类型也叫参考类型(Reference Type). 字节类型,也叫byte类型, ...

  5. python中利用少量代码快速实现从类对象中抽取所需属性的一种实践

    项目中有可能会碰到这样一种场景: 根据一个id,查询得到和id对应的完整数据信息存储对象,比如书籍id到书籍详细信息,用户id到用户详细信息等,详细信息字段可能包括几十甚至上百个数据字段,真正需要返回 ...

  6. 北京Uber优步司机奖励政策(4月8日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. 成都Uber优步司机奖励政策(1月30日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 深入解析UUID及其应用(转载)

    UUID 编辑 UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Founda ...

  9. linux常用的命令之一chmod

    用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(g ...

  10. hdu1848Fibonacci again and again(sg函数)

    Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...