『Python CoolBook』數據結構和算法_字典比較&字典和集合

 1、字典元素排序

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

結合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')]

 

2、字典和集合

一個字典就是一個鍵集合與值集合的映射關係。字典的keys()方法返回一個展示鍵集合的鍵視圖對象。鍵視圖的一個不多被瞭解的特性就是它們也支持集合操做,好比集合並、交、差運算。因此,若是你想對集合的鍵執行一些普通的集合操做,能夠直接使用鍵視圖對象而不用先將它們轉換成一個set。blog

字典的items()方法返回一個包含(鍵,值)對的元素視圖對象。這個對象一樣也支持集合操做,而且能夠被用來查找兩個字典有哪些相同的鍵值對。排序

儘管字典的values()方法也是相似,可是它並不支持這裏介紹的集合操做。某種程度上是由於值視圖不能保證全部的值互不相同,這樣會致使某些集合操做會出現問題。不過,若是你硬要在值上面執行這些集合操做的話,你能夠先將值集合轉換成set,而後再執行集合運算就好了。ip

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()) # 報錯
相關文章
相關標籤/搜索