Python系列之字典使用技巧

这篇文章总结了Python中字典的常用操作,包括创建字典字典遍历键值不存在时的赋值问题获取字典最值

创建字典

普通创建

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

依据键值列表进行创建

1
2
3
4
5
6
7
a = [1,2,3,4]
d = dict.fromkeys(a, 0)
# 输出
# {1: 0, 2: 0, 3: 0, 4: 0}

# 使用字典内涵的方法进行创建
d = {el:0 for el in a}

两个列表组成字典

1
2
3
4
5
6
7
8
keys = ['a', 'b', 'c'] 
values = [1, 2, 3]
# zip
dictionary = dict(zip(keys, values))

print (dictionary)
# 输出:
# {'a': 1, 'c': 3, 'b': 2}

值为列表

1
2
3
4
5
# 简单方法:调用collections中的defaultdict
from collections import defaultdict
dic_test=defaultdict(list)
dic_test['a'].append(1)
# 具体的形式:defaultdict(<type 'list'>, {'a': [1]})

字典遍历

遍历键和值

1
2
3
for k,v in dic.items():
print (k)
print (v)

遍历键-消失的has_key

Python3删除了字典的has_key方法,取而代之的是in:

1
2
3
4
5
6
7
d = {"1":1, "2":0, "3":2}
# 使用has_key报错
print("yes") if d.has_key("1") else print("no")
AttributeError: 'dict' object has no attribute 'has_key'

# 使用in
print("yes") if "1" in d.keys() else print("no")


键值不存在时的赋值问题

使用字典的可能会遇到判断键值是不是已经存在于字典,如果存在就将其值加1,如果不存在就加入这个键值,然后计数为1

复杂方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
d = {"a":0, "b":0, "c":1}
# 字符串也是可迭代对象,返回单个字符
e="abababcd"

# 复杂的用法
# 虽然也可以解决问题,但是在我看来肯定不会是最好的
# 略显笨拙
for i in e:
if i in d.keys():
d[i]+=1
else:
d[i]=0
d[i]+=1
# {'a': 3, 'b': 3, 'c': 2, 'd': 1}

dic.get方法

1
2
3
4
5
6
7
8
9
10
dict.get(key, default=None)
# key -- 字典中要查找的键。
# default -- 如果指定键的值不存在时,返回该默认值值。

for i in e:
if i in d.keys():
d[i]+=1
else:
# 一定要设置默认值为0,不然None+1会报错
d[i]=d.get(i,0)+1

很明显,dic.get方法使代码变得更加优雅了。

defaultdict方法

全新的dic

1
2
3
4
5
6
7
8
9
from collections import defaultdict
# lambda: 0表示不存在的key默认为0
d = defaultdict(lambda: 0)
d
defaultdict(<function __main__.<lambda>()>, {})
for i in e:
d[i]+=1
d
defaultdict(<function __main__.<lambda>()>, {'a': 3, 'b': 3, 'c': 1, 'd': 1})

部分初始化的dic

1
2
3
4
5
6
7
8
9
10
11
12
from collections import defaultdict
d = {"a":0, "b":0, "c":1}
# 将已经存在的字典d转化为defaultdict,并且如果键值不存在,默认值为0
d = defaultdict(lambda: 0,d)
for i in e:
d[i]+=1
d
defaultdict(<function __main__.<lambda>()>, {'a': 3, 'b': 3, 'c': 2, 'd': 1})

# 顺便将defaultdict转化为常规的dict
dict(d)
{'a': 3, 'b': 3, 'c': 2, 'd': 1}

参考链接


获取字典最值

利用min(dict, key=dict.get)

1
2
3
4
d = {1:1, 2:0, 3:2}
min(d, key=d.get)
# 输出:
# 2

利用lambda函数

1
2
3
4
5
6
7
8
9
# 得到索引和值
min(d.items(), key=lambda x: x[1])
# 输出:
# (2, 0)

# 只得到值
min(d, key=lambda x: d[x])
# 输出:
# 2

字典排序

按照字典的value进行排序,并且返回字典

1
2
3
4
x = {1: 2, 3: 4, 4: 3, 2: 1, 0: 0}
# 按照字典的value值进行排序
{k: v for k, v in sorted(x.items(), key=lambda item: item[1])}
{0: 0, 2: 1, 1: 2, 4: 3, 3: 4}




-----本文结束感谢您的阅读-----

本文标题:Python系列之字典使用技巧

文章作者:showteeth

发布时间:2019年11月29日 - 19:33

最后更新:2020年05月19日 - 19:13

原始链接:http://showteeth.tech/posts/30759.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%