您现在的位置是:亿华云 > 数据库

Python字典:竟还有我不会的高阶玩法?

亿华云2025-10-03 13:13:49【数据库】0人已围观

简介通过序列生成字典 我们将下面的序列转换为dict类型。lst = [(a, 1), (b, 2), (c, 3)]普通的写法for k, v in lst:dic[k] = v更pyth

通过序列生成字典

我们将下面的字典序列转换为dict类型。

lst = [(a,竟还 1), (b, 2), (c, 3)]

普通的写法

for k, v in lst:

dic[k] = v

更pythonic的写法

利用字典推导式快速生成字典。

{ k: v for k,高阶 v in lst}

key的默认值

当指定key不存在时,将value设置为 0。玩法

普通的字典写法

if key not in dct:

dct[key] = 0

pythonic的写法

dct[key] = dct.get(key, 0)

交换key与value

普通的写法

dic = { Python: 1, Java: 2}

new_dic = { }

for k, v in dic.items():

new_dic[v] = k

更pythonic的写法

dic = { Python: 1, Java: 2}

new_dic = { v: k for k, v in dic.items()}

序列修改和初始化

示例数据

lst = [(a, 1), (b, 2), (c, 3)]

dic = { a: [0]}

如果我们需要根据lst来更新dic中的数据,当key存在,竟还则将value添加到原序列末尾,高阶否则初始化value并用序列保存。玩法

普通的字典写法

for key, value in lst:

if key in dic:

dic[key].append(value)

else:

dic[key] = [value]

更pythonic的写法

for (key, value) in lst:

group = dic.setdefault(key, [])

group.append(value)

# dic:{ a: [0, 1], b: [2], c: [3]}

setdefault(key, default)会先判断key是否存在,亿华云计算存在则返回dct[key] ,竟还 不存在则把dct[key]设为 [] 并返回。

key,高阶items的玩法集合运算

如果我们现在需要获取两个字典的key相交的部分的映射信息。

普通的字典写法

dic1 = { Python: 1, Java: 2, C: 3}

dic2 = { Python: 3, Java: 2, C++: 1}

new_dic = { }

for k, v in dic1.items():

if k in dic2.keys():

new_dic[k] = v

print(new_dic)

# { Python: 1, Java: 2}

更pythonic的写法

dic1 = { Python: 1, Java: 2, C: 3}

dic2 = { Python: 3, Java: 2, C++: 1}

print({ k: dic1[k] for k in dic1.keys() & dic2.keys()})

# { Python: 1, Java: 2}

这里的dic1.keys() & dic2.keys()用到的就是 keys()进行集合运算,items()同样可以进行集合运算。竟还

如果现在我们要获取两个字典中 key,高阶value 完全相同的部分

dic1 = { Python: 1, Java: 2, C: 3}

dic2 = { Python: 3, Java: 2, C++: 1}

print(dic1.items() & dic2.items())

# { (Java, 2)}

灵活运用 keys,items() 集合运算的特性,可以快速提取我们想要的云南idc服务商内容。

按key或value对字典排序

使用sorted()函数快速实现对key或value的排序。

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

lst1 = sorted(dic.items(), key=lambda x: x[0], reverse=False)

# [(a, 2), (b, 1), (c, 3), (d, 0)]

lst2 = sorted(dic.items(), key=lambda x: x[1], reverse=False)

# [(d, 0), (b, 1), (a, 2), (c, 3)]

print(按照键降序:, { key: value for key, value in lst1})

print(按照值降序:, { key: value for key, value in lst2})

# 按照键降序: { a: 2, b: 1, c: 3, d: 0}

# 按照值降序: { d: 0, b: 1, a: 2, c: 3}

多个字典排序

如果一个序列中包含多个字典,现在要根据条件对这些字典继续排序。同样可以使用sorted()函数来实现。

dict_list = [

{ letter: B, number: 2},

{ letter: A, number: 3},

{ letter: B, number: 1}

]

# 按 letter 排序

print(sorted(dict_list,

key=lambda dic: dic[letter]))

# 按 letter, number 排序

print(sorted(dict_list,

key=lambda dic: (dic[letter], dic[number])))

# [{ letter: A, number: 3}, { letter: B, number: 2}, { letter: B, number: 1}]

# [{ letter: A, number: 3}, { letter: B, number: 1}, { letter: B, number: 2}]

当然,如果你知道itemgetter()的话,上面的代码就可以改变一下,执行速度会更快。

from operator import itemgetter

print(sorted(dict_list

key=itemgetter(letter)))

print(sorted(dict_list,

key=itemgetter(letter, number)))

itemgetter()获取的不是值,而是定义了一个函数,通过该函数作用到目标对象上。

很赞哦!(9)