• 【Python】【字典】


    字典 = {'键1':'值1','键2':'值2','键3':'值3',...

    animal_dict = {'Cow':'Milk','Chicken':'egg'}

    字典由键值对构成,这种键值对称为项。在字典(及其他映射类型中),键是唯一的,而值无需如此

    一、函数dict

    二、format_map

    '字符串{键名}'.format_map(键名所在字典)

    作用:字典中包含各种信息,只需在格式字符串中提取所需的信息即可

    >>> '张三来自于{省份}{城市}'.format_map(dict_v['张三'])
    '张三来自于浙江杭州'
    >>> dict_v = {'张三':{'省份':'浙江','城市':'杭州'},'李四':{'省份':'浙江','城市':'嘉兴'},'王五':{'省份':'浙江','城市':'杭州'},'李六':{'省份':'江苏','城市':'南京'}}
    >>> '张三来自于{省份}{城市}'.format_map(dict_v['张三'])
    '张三来自于浙江杭州'
    >>> '李四来自于{省份}{城市}'.format_map(dict_v['李四'])
    '李四来自于浙江嘉兴'

    三、字典方法

    1、clear

    字典.clear()

    作用:删除所有字典项

    >>> x = {}
    >>> y = x #y和x指向同一字典
    >>> x['key'] = 'value'
    >>> y
    {'key': 'value'}
    >>> x
    {'key': 'value'}
    >>> x = {} #x指向另一个字典
    >>> x
    {} #x是新字典的值
    >>> y
    {'key': 'value'} #所以y还是原来字典的值
    >>> x = {}
    >>> y = x #y和x指向同一字典
    >>> x['key'] = 'value'
    >>> y
    {'key': 'value'}
    >>> x.clear() #y和x共同指向的字典清空
    >>> y
    {}

    2、copy/deepcopy,浅复制/深复制

    字典.copy()

    from copy import deepcopy     deepcopy(字典)

           要理解浅复制和深复制的区别,首先要了解python存储数据的方式。变量 = 值1,是把变量指向了值1(内存地址1),假使重新给变量赋值为值2(内存地址2) ,那么变量和值1的映射关系没有了,替换为变量指向值2。

    >>> from copy import deepcopy
    >>> dict_orign = {'key':{'1':'1','2':'2'}}
    >>> copy1 = dict_orign.copy()
    >>> copy2 = deepcopy(dict_orign)
    >>> id(dict_orign)
    2442900992712 #原件在内存中的地址
    >>> id(copy1)
    2442900738280 #浅复制副本1在内存中的地址
    >>> id(copy2)
    2442900992392 #深复制副本2在内存中的地址
    >>> id(dict_orign['key'])
    2442900975032 #原件字典项中值在内存中的地址
    >>> id(copy1['key'])
    2442900975032 #浅复制副本1字典项中值在内存中的地址
    >>> id(copy2['key'])
    2442900992552 #深复制副本2字典项中值在内存中的地址

    ↑↑↑见上述,原件和浅复制副本字典项-值在内存中的地址是一样的,而深复制完全不同,所以深复制后续的操作与原件不相关

    >>> M = {'1':['1','2','3']}
    >>> m1 = M.copy()
    >>> id(M['1'])
    2442869287688
    >>> id(m1['1'])
    2442869287688 #浅复制时,副本和原件值指向的内存地址都是2442869287688
    >>> m1['1'].remove('3') #在既有内存地址上修改
    >>> M
    {'1': ['1', '2']} #原件也跟着副本的修改而变动了
    >>> id(M['1'])
    2442869287688
    >>> id(m1['1'])
    2442869287688 #值指向的内存地址还是原先的2442869287688
    >>> m1['1'] = ['1','1','1'] #副本值重新赋值,也就是指向了新的内存地址
    >>> M
    {'1': ['1', '2']} #因为副本和原件值指向的内存地址不同,所以副本的变更不影响原件
    >>> id(M['1']) 
    2442869287688
    >>> id(m1['1'])
    2442900925064 #副本内存地址已变更

    3、fromkeys

    {}.fromkeys([键名列表],值),值为选填项,不填则每个键对应的值都是None,填则每个键对应的值都是设置值

    dict.fromkeys([键名列表],值),值为选填项,不填则每个键对应的值都是None,填则每个键对应的值都是设置值

    作用:创建一个新字典,其中包含指定的键,且每个键对应的值都是None

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

    4、get

    字典.get(键,值),值为选填项,不填则若无此项返回None,填则若无此项返回设定值

    作用:访问字典中的项,如果存在,则与普通字典查找一致;如果不存在则返回None,也可将None替换为其他值。

    >>> d = {}
    >>> print(d['name'])
    Traceback (most recent call last):
    File "<stdin>", line 1, in ?
    KeyError: 'name'
    >>> print(d.get('name'))
    None
    >>> d.get('name', 'N/A')
    'N/A'

    5、items

    字典.items()

    作用:(1)返回一个包含所有字典项的列表,其中每个元素都为(key,value)形式

          (2)字典项在列表中无序排序

        (3)items非副本,如果字典发生变化,items也会响应改变

    >>> d = {'title': 'Python Web Site', 'url': 'http://www.python.org', 'spam': 0}
    >>> d.items()
    dict_items([('url', 'http://www.python.org'), ('spam', 0), ('title', 'Python Web Site')])

    返回值属于一种名为字典视图的特殊类型。字典视图可用于迭代(迭代将在第5章详细介绍)。
    另外,你还可确定其长度以及对其执行成员资格检查。

    >>> it = d.items()
    >>> len(it)
    3
    >>> ('spam', 0) in it
    True

    视图的一个优点是不复制,它们始终是底层字典的反映,即便你修改了底层字典亦如此。

    >>> d['spam'] = 1
    >>> ('spam', 0) in it
    False
    >>> d['spam'] = 0
    >>> ('spam', 0) in it
    True

    6、keys

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

    7、pop方法

    字典.pop(键名)

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

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

    8、popitem

    字典.popitem()

    作用:随机弹出键值对,可用于逐个处理字典项场景,这样无需提供键名

    >>> d = {'url': 'http://www.python.org', 'spam': 0, 'title': 'Python Web Site'}
    >>> d.popitem()
    ('url', 'http://www.python.org')
    >>> d
    {'spam': 0, 'title': 'Python Web Site'}

    9、setdefault

    字典.setdefault(键,值),值为选填项,不填则若无此项值为None,字典新增此键值对;填则若无此项值为设定值,字典新增此键值对

    作用:类似于get,但键不存在时,会在字典中添加指定键值对

    >>> d = {}
    >>> d.setdefault('name', 'N/A')
    'N/A'
    >>> d
    {'name': 'N/A'}
    >>> d['name'] = 'Gumby'
    >>> d.setdefault('name', 'N/A')
    'Gumby'
    >>> d
    {'name': 'Gumby'}
    >>> d = {}
    >>> print(d.setdefault('name'))
    None
    >>> d
    {'name': None}

    10、update

    字典1.update(字典2)

    作用:使用字典2中的项来更新字典1,若存在相同项,则用字典2的值替换字典1的值

    >>> d = {
    ... 'title': 'Python Web Site',
    ... 'url': 'http://www.python.org',
    ... 'changed': 'Mar 14 22:09:15 MET 2016'
    ... }
    >>> x = {'title': 'Python Language Website'}
    >>> d.update(x)
    >>> d
    {'url': 'http://www.python.org', 'changed':
    'Mar 14 22:09:15 MET 2016', 'title': 'Python Language Website'}

    11、values

    字典.values()

    作用:返回值组成的字典视图,keys因为键特性,不会重复,values返回的可能包含重复值

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

     

  • 相关阅读:
    bzoj3524: [Poi2014]Couriers(主席树)
    51nod 1275 连续子段的差异(twopointer+单调队列)
    51nod 1274 最长递增路径(DP)
    51nod 1273 旅行计划(思维题)
    51nod 1257 背包问题 V3(分数规划)
    CSS 几款比较常用的翻转特效
    css文字飞入效果
    jQuery使用方法
    数据库
    关系型数据库基本概念及MySQL简述
  • 原文地址:https://www.cnblogs.com/12345zjl/p/15090489.html
Copyright © 2020-2023  润新知