python学习笔记_04(字典)

字典


1. 字典 :python唯一内建的映射类型

列表通过编号进行访问,列表中的值有顺序

字典通过名字进行访问,自动中的值没有顺序

字典中的键必须是不可变类型可以是数字,字符串,元组

1.1 字典的创建
#1. 直接通过赋值的方式
phonebook = {'Alice': '2341', 'Beth': '9012', 'Cecil': '3258'}
#2. 通过dict的(健,值)对的序列
items = [('name', 'Gumby'), ('age', 42)]
d = dict(items)    #d = {'name': 'Gumby', 'age': 42}
#3. 通过dict的关键字参数
d = dict(name = 'Gumby', age = 42)    #d = {'name': 'Gumby', 'age': 42}
#4. dict传入其他字典
d = dict(phonebook)    #也可以使用字典的copy方法
#5. 新建空字典
d1 = {}
d2 = dict()
1.2 字典的基本操作
  • len(d), 返回字典中项(键-值对)数量
  • d[key], 返回键key对应的值
  • d[key] = val, 将值val关联到键key
  • del d[key], 删除键为key的项
  • key in d检测字典中是否存在键为key的项

字典和列表区别

字典可以对不存在的键进行赋值,字典会建立新的项

列表不能对不存在的索引进行赋值,会引发IndexError

成员资格检测,k in d查找的是键,k in l查找的是值,字典中in操作比列表高效,数据规模越大越明显

1.3 字典格式字符串
  • 转换说明符(%)后面加上键,使用括号括起来
d = {'name': 'Grumby', 'phone': '9012'}
"%(name)s's phone number is %(phone)s" % d
1.4 字典方法
  • clear()方法, 清楚字典中的所有项,原地操作,返回None

    d = dict(name = 'Gumby', age = '42')
    return_val = d.clear()
    print return_val    #return_val = None
    print d    #d = {}
  • copy()方法,返回一个具有相同键-值对的新字典(这个方法实现的是浅拷贝shallow copy)

    #1. 浅拷贝shallow copy
    x = {'username': 'admin', 'machines': ['foo', 'bar', 'baz']}
    y = x.copy()
    y['username'] = 'mlh'
    y['machines'].remove('bar')
    print x    #{'username': 'admin', 'machines': ['foo', 'baz']}
    print y    #{'username': 'mlh', 'machines': ['foo', 'baz']}
    #2. 深拷贝
    from copy import deepcopy
    d = {}
    d['name'] = ['Alfred', 'Bertand']
    c = d.copy()
    dc = deepcopy(d)
    d['name'].append('Clive')
    print d    #{'name': ['Alfred', 'Bertand', 'Clive']}
    print c    #{'name': ['Alfred', 'Bertand', 'Clive']}
    print dc    #{'name': ['Alfred', 'Bertand']}
  • fromkeys(lst)方法,使用给的的键建立新的字典,每个键对应的值为None

    # 1. 通过自动调用
    {}.fromkeys(['name', 'age'])    #{'age': None, 'age': None}
    # 2. 直接使用dict调用
    dict.fromkeys(['name', 'age'])    #{'age': None, 'age': None}
    # 3. 指定默认值
    dict.fromkeys(['name', 'age'], 'unknown')    #{'age': 'unknown', 'name': 'unknown'}
  • get(k[, default])方法,更宽松访问字典方法,使用[]访问字典中不存在的方法是会引发KeyError,get方法不会,会返回一个默认值None

    #1. 基本用法
    d = {}
    d['name']    #KeyError
    d.get('name')    #没有异常,返回None
    #2. get还可以自定义默认值
    d.get('name', 'unknown')    # unknown
  • has_key(key)方法,检查字典中是否含有特定的键,d.has_key(k)相当与k in d,python3.0中没有这个函数

    >>> d = {}
    >>> d.has_key('name')
    False
    >>> d['name'] = 'Eric'
    >>> d.has_key('name')
    True
  • items()和iteritems(),返回字典所有的项,iterms以列表方式返回,iteriterms返回一个迭代器,很多情况下iteritems跟高效,

    >>> d = {'titile': 'Python Web Site', 'url': 'http://www.python.org', 'spam': '0'}
    >>> d.items()
    [('url', 'http://www.python.org'), ('spam', '0'), ('titile', 'Python Web Site')]
    >>> d.iteritems()
    <dictionary-itemiterator object at 0x030AC2D0>
    >>> list(d.iteritems())
    [('url', 'http://www.python.org'), ('spam', '0'), ('titile', 'Python Web Site')]
    >>> 
  • keys()和iterkeys(),返回自动所有key,和上面两个方法类似

    >>> d.keys()
    ['url', 'spam', 'titile']
    >>> d.iterkeys()
    <dictionary-keyiterator object at 0x030AC2D0>
    >>> list(d.iterkeys())
    ['url', 'spam', 'titile']
  • pop(key)方法,获取给的键的值,并移除该项,,key不存在引发KeyError

    >>> d.pop('spam')
    '0'
    >>> d
    {'url': 'http://www.python.org', 'titile': 'Python Web Site'}
    >>> d.pop('spam')
    KeyError: 'spam'
  • popitem()方法,类似于list.pop,与list不同的是字典弹出任意一个项,因为字典没有顺序

    >>> d.popitem()
    ('url', 'http://www.python.org')
  • setdefault(key[, value = None])方法,某种程度上与get类似,能够获取与给定键关联的值,初次外setdefault还能在字典不含有给定键的情况下设定相应的键值。

    >>> d = {}
    >>> print d.setdefault('name', 'Gumby')
    Gumby
    >>> d
    {'name': 'Gumby'}
    >>> print d.setdefault('name', 'Beth')
    Gumby
    >>> d
    {'name': 'Gumby'}

    setdefault(key, value = None)在key不存在时先向字典添加项,返回键的值,在字典中key已存在时,直接返回key的值

  • update(),利用另一个字典更新字典,新的key添加,相同的key覆盖,参数与dict()方法类似,可以是字典,(key, val)对的序列或可迭代对象及关键字参数。

    >>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org'}
    >>> x = {'title': 'Python Language Website', 'changed': '2008-10-28 22:09:15'}
    >>> d.update(x)
    >>> d
    {'url': 'http://www.python.org', 'changed': '2008-10-28 22:09:15', 'title': 'Python Language Website'}
  • values()和itervalues(),以列表方式返回字典中的值(itervalues返回迭代器),与keys()不同的返回值可以包含重复的元素

    >>> d = {'url': 'http://www.python.org', 'changed': '2008-10-28 22:09:15', 'title': 'Python Language Website'}
    >>> d.values()
    ['http://www.python.org', '2008-10-28 22:09:15', 'Python Language Website']
    >>> d.itervalues()
    <dictionary-valueiterator object at 0x031E8F30>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值