关于python dict()函数

创建字典的方式有三种:


dict(a=1, b=2, c=2)//显示结果{'a': 1, 'b': 2, 'c': 2}


后两种必须要先定义a,b,c:


dict([(a,1), (b,2), (c,3)])
dict({a:1, b:2, c:3})


推荐使用第二种方法结合zip创建


key = 'abcde'
value = range(1, 6)
dict(zip(key, value))  //显示结果{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}


(补充说明zip函数


zip函数返回一个tuple列表


列子
x = [1, 2, 3]


y = [4, 5, 6]


print (dict(zip(x, y)))


输出结果:
{1: 4, 2: 5, 3: 6})


使用iteritems来遍历字典
d = dict(a=1, b=2, c=3)
for k, v in d.iteritems():
    print k, v
# a 1
# c 3
# b 2
当然也可以使用items来遍历字典, 与之不同的是iteritems返回一个迭代器。


d = dict(a=1, b=2, c=3)
for k, v in d.items():
    print k, v
# a 1
# c 3
# b 2
In [69]: d.iteritems()
Out[69]: <dictionary-itemiterator at 0x3f216d8>


In [70]: d.items()
Out[70]: [('a', 1), ('c', 3), ('b', 2)]


使用get, pop来获取/删除key
首先,dict[key] 与 delete dict[key]也可以获取/删除key。但是key不存在时,会引发 KeyError 异常。为了避免引发异常可以使用get和带defaut参数的pop


get(key[, default])
如果key在字典中,返回对应的value, 否则返回default。所以从来不会引发异常。
pop(key[, default])
如果default未设置,则如果key不在字典中,删除key将引发异常。使用时加上default。
dict(dict1, **dict2)合并两个字典
合并两个字典可以先把两个字典分成key-value对,再连接两个key-value对,生成新的字典。即 dict(dict1.items()+dict2.items()) 。不过效率有些低。
使用效率更高的 dict(dict1, **dict2) 连接两个字典。


In [29]: dict1
Out[29]: {'a': 1, 'b': 2, 'c': 3}


In [30]: dict2
Out[30]: {'d': 4, 'e': 5, 'f': 6}


In [31]: dict(dict1, **dict2)
Out[31]: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}
$ python -m timeit -s 'dict1=dict2=dict(a=1,b=2)' 'dict3=dict(dict1,**dict2)'
1000000 loops, best of 3: 0.573 usec per loop
$ python -m timeit -s 'dict1=dict2=dict(a=1,b=2)' 'dict3=dict(dict1.items()+dict2.items())'
100000 loops, best of 3: 2.21 usec per loop
谨慎使用dict.copy()
dict.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}

更新和删除:

直接用键值对访问更新:

如dic1的值为:{'a': 1, 'b': 2, 'c': 2}

可直接使用 dic1['a']=2

这样一来dic1的值为{'a': 2, 'b': 2, 'c': 2}

删除:

del dic1['a']这样就删除字典中键值为'a'的数据。

dic1.pop('a')这样删除且返回字典中键值为‘a’的元素。

dic1.clear()删除整个字典元素,但字典存在。

del dic1 删除整个字典,字典不存在

dict的所有方法API:

申明 m={};
[python]dictionary方法说明 
OperationResultNotes
len(a)the number of items in a 得到字典中元素的个数
a[k]the item of a with key k 取得键K所对应的值(1), (10)
a[k] = vset a[k] to v 设定键k所对应的值成为v
del a[k]remove a[k] from a 从字典中删除键为k的元素(1)
a.clear()remove all items from a 清空整个字典
a.copy()a (shallow) copy of a 得到字典副本
k in aTrue if a has a key k, else False 字典中存在键k则为返回True,没有则返回False(2)
k not in aEquivalent to not k in a   字典中不存在键k则为返回true,反之返回False(2)
a.has_key(k)Equivalent to k in a, use that form in new code 等价于k in a
a.items()a copy of a's list of (key, value) pairs 得到一个键,值的list(3)
a.keys()a copy of a's list of keys 得到键的list(3)
a.update([b])updates (and overwrites) key/value pairs from b从b字典中更新a字典,如果键相同则更新,a中不存在则追加(9)
a.fromkeys(seq[, value])Creates a new dictionary with keys from seq and values set to value (7)
a.values()a copy of a's list of values(3)
a.get(k[, x])a[k] if k in a, else x(4)
a.setdefault(k[, x])a[k] if k in a, else x (also setting it)(5)
a.pop(k[, x])a[k] if k in a, else x (and remove k)(8)
a.popitem()remove and return an arbitrary (key, value) pair(6)
a.iteritems()return an iterator over (key, value) pairs(2), (3)
a.iterkeys()return an iterator over the mapping's keys(2), (3)
a.itervalues()return an iterator over the mapping's values(2), (3)


版权声明:本文为weixin_38626799原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。