码迷,mamicode.com
首页 > 编程语言 > 详细

『Python CoolBook』数据结构和算法_字典比较&字典和集合

时间:2018-03-18 00:17:03      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:理解   highlight   post   数据结构   ted   不能   字典   pytho   运算   

 一、字典元素排序

dict.keys(),dict.values(),dict.items()

结合max、min、sorted、zip进行排序是个很好的办法,另外注意不使用zip时,字典的lambda操作方法:

price = {
    ‘a‘:1,
    ‘b‘:2,
    ‘c‘:3
}

# 多个键的值相同时会采取元组比较的形式,实际应用时注意
min_p = min(zip(price.values(), price.keys()))
max_p = max(zip(price.values(), price.keys()))
print(min_p, max_p)  # (1, ‘a‘) (3, ‘c‘)

# 字典被处理时会被处理key,不使用zip时比较难以理解
max(price, key=lambda k:price[k])  # ‘c‘

# 排序操作
sorted(zip(price.values(),price.keys()),key=lambda x:-x[0])  #  [(3, ‘c‘), (2, ‘b‘), (1, ‘a‘)]

 

二、字典和集合

一个字典就是一个键集合与值集合的映射关系。字典的keys()方法返回一个展现键集合的键视图对象。键视图的一个很少被了解的特性就是它们也支持集合操作,比如集合并、交、差运算。所以,如果你想对集合的键执行一些普通的集合操作,可以直接使用键视图对象而不用先将它们转换成一个set。

字典的items()方法返回一个包含(键,值)对的元素视图对象。这个对象同样也支持集合操作,并且可以被用来查找两个字典有哪些相同的键值对。

尽管字典的values()方法也是类似,但是它并不支持这里介绍的集合操作。某种程度上是因为值视图不能保证所有的值互不相同,这样会导致某些集合操作会出现问题。不过,如果你硬要在值上面执行这些集合操作的话,你可以先将值集合转换成set,然后再执行集合运算就行了。

a = {
    ‘x‘:1,
    ‘y‘:2,
    ‘z‘:3
}
b = {
    ‘w‘:4,
    ‘x‘:5,
    ‘y‘:6
}

# 字典.items()返回的实际是集合
print(a.items() & b.items())  # set()
print(a.items() - b.items())  # {(‘z‘, 3), (‘x‘, 1), (‘y‘, 2)}

# 字典.keys()返回的实际是集合
print(a.keys() - b.keys())  # {‘z‘}

# 由于可能存在重复元素,所以.values()不是集合
# print(a.values() - b.values()) # 报错

 

『Python CoolBook』数据结构和算法_字典比较&字典和集合

标签:理解   highlight   post   数据结构   ted   不能   字典   pytho   运算   

原文地址:https://www.cnblogs.com/hellcat/p/8593656.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!