《Python基础教程》学习笔记之[D4]当索引不好用时—字典

来源:互联网 发布:easyui 数据导出excel 编辑:程序博客网 时间:2024/06/04 17:51

只做涂鸦笔记之用,如有疑议等问题可留言探讨。

#!/usr/bin/env python2.7# -*- coding: utf-8 -*- # 字典 一种通过名字引用值的数据结构,这种结构类型成为映射(mapping)# 直接创建一个空字典d = {}# 一个普通字典>>> d = {'hello':'world', 0.36:'float',('a',):'tuple'}>>> d{0.36: 'float', ('a',): 'tuple', 'hello': 'world'}>>># 元素访问>>> d = {'hello':'world', 0.36:'float',('a',):'tuple'}>>> d{0.36: 'float', ('a',): 'tuple', 'hello': 'world'}>>> d.0.36                                              # 错  File "<stdin>", line 1    d.0.36      ^SyntaxError: invalid syntax>>> d.hello                                             # 错Traceback (most recent call last):  File "<stdin>", line 1, in <module>AttributeError: 'dict' object has no attribute 'hello'>>> d[0.36]'float'>>> d[('a',)]'tuple'>>># 一个将 List 转换为 Dict 的例子>>> l = [('a',), ('c',)]>>> dict(l)Traceback (most recent call last):  File "<stdin>", line 1, in <module>ValueError: dictionary update sequence element #0 has length 1; 2 is required>>> l = [('a','b'), ('c','d')]>>> dict(l){'a': 'b', 'c': 'd'}>>># 字典的基本操作len(d)d[k]d[k] = vdel d[k]k in d# 键类型 不一定为整型数,也可能是浮点,字符串或者元组# 字典中检测成员资格比列表中更高效# 用字典格式化字符串,如果用字典,则可以不必按照顺序来,否则用元组必须按照顺序>>> format = 'this is a %(lang)s string'>>> d = {'lang':'python', 'lang1':'php'}>>> print format % dthis is a python string>>># 一些更强大的可以参看 string.Template# 字典方法# clear() 这是一个原地操作,所以无返回值>>> d = {'ele1':1, 'ele2':2}>>> d{'ele1': 1, 'ele2': 2}>>> d.clear()>>> d{}>>># copy 浅拷贝 deepcopy 深拷贝>>> d1 = {'a':1, 'b':2, 'c':3}>>> d2 = d1.copy()>>> d2{'a': 1, 'c': 3, 'b': 2}>>> d2['a'] = 'Changed'>>> d1{'a': 1, 'c': 3, 'b': 2}>>> d2{'a': 'Changed', 'c': 3, 'b': 2}>>># 浅拷贝 原来值发生变化>>> d1 = {'a':1, 'b':2, 'c':[1,2,3]}>>> d2 = d1.copy()>>> d2{'a': 1, 'c': [1, 2, 3], 'b': 2}>>> d2['c'].remove(2) #d1 的值也随着发生了变化>>> d2{'a': 1, 'c': [1, 3], 'b': 2}>>> d1{'a': 1, 'c': [1, 3], 'b': 2}>>># 深拷贝>>> from copy import deepcopy>>> d1 = { 'a':1, 'b':2, 'c':3, 'd':[1,2,4,5] }>>> d2 = deepcopy(d1)>>> d2['d'].remove(2)>>> d2{'a': 1, 'c': 3, 'b': 2, 'd': [1, 4, 5]}>>> d1{'a': 1, 'c': 3, 'b': 2, 'd': [1, 2, 4, 5]}>>># fromkeys 使用给定的键来创建字典,默认值None,也可以设定其他默认值>>> {}.fromkeys(['name', 'sex']){'name': None, 'sex': None}>>>>>> {}.fromkeys(['name', 'sex'], 'defaultvalue'){'name': 'defaultvalue', 'sex': 'defaultvalue'}>>># get 更宽松的访问字典的方法,如果直接 d[key] 访问不存在的key会出错,而通过get会更友好>>> d1{'a': 1, 'c': 3, 'b': 2, 'd': [1, 2, 4, 5]}>>> d1['haha']Traceback (most recent call last):  File "<stdin>", line 1, in <module>KeyError: 'haha'>>> d1.get('haha')None>>> d1.get('haha', 'defaultvalue')'defaultvalue'>>># has_key 同 k in d。   Python3.0 不再使用该函数>>> d1 = {'a':1}>>> d1.has_key('a')True>>> d1.has_key('b')False>>># items iteritems # items 返回列表中的项为List,没有特殊顺序,每一项为一个键值的元组>>> d1 = { 'a':232, 'b':'sdsd', 'c':('hello',) }>>> d1.items()[('a', 232), ('c', ('hello',)), ('b', 'sdsd')]>>># iteritems 返回一个迭代对象>>> d1 = { 'a':232, 'b':'sdsd', 'c':('hello',) }>>> d1.items()[('a', 232), ('c', ('hello',)), ('b', 'sdsd')]>>> it = d1.iteritems()>>> it<dictionary-itemiterator object at 0x01225A50>>>> list(it)[('a', 232), ('c', ('hello',)), ('b', 'sdsd')]>>># 如果需要迭代的情况下, iteritems 更高效# keys iterkeys keys是将dict 的键作为列表返回,而 iterkeys是返回迭代对象# pop 获得给定键的值,然后将这个键值从字典中移除>>> a = {'a':1,'b':2 }>>> a.pop('a')1>>> a{'b': 2}>>># popitem 弹出随机项>>> a = { 'a':1, 'b':2, 'c':3, 'd':4 }>>> a.popitem()('a', 1)>>> a.popitem()('c', 3)>>> a.popitem()('b', 2)>>> a{'d': 4}>>># setdefault 类似于 get 但是,可以在给定不存在的键的情况下赋值>>> d = {}>>> d.setdefault('name', 'defaultvalue')    # 默认值 如果未设定,则为None'defaultvalue'>>> d{'name': 'defaultvalue'}>>> d.setdefault('name', 'newvalue')        # 试图换个新值'defaultvalue'>>> d{'name': 'defaultvalue'}>>># update 用一个字典更新另一个字典的值>>> d = {'a':1,'b':2, 'c':3}>>> x = {'a':'changed', 'd':'newvalue'}>>> d.update(x)>>> d{'a': 'changed', 'c': 3, 'b': 2, 'd': 'newvalue'}>>>#values itervalues 与 keys itervalues 一样。


原创粉丝点击