Python - 字典的使用优化和应用技巧

目录

一、zip() 对字典实现键值反转

二、字典的集合操作,获取两个字典对象的相同或不同


一、zip() 对字典实现键值反转

!! 注意:zip函数返回一个迭代器,即内容只能消费一次!

prices = {'a': 1, 'b': 123, 'c': 111, 'd': 555, 'e': 4}

# !!注意,zip函数返回一个迭代器,即内容只能消费一次
zip_prices = zip(prices.values(), prices.keys())
print(zip_prices)  # <zip object at 0x0000021E64AC9E88>
list_prices = []
for i in zip_prices:
    list_prices.append(i)
print(list_prices)
# [(1, 'a'), (123, 'b'), (111, 'c'), (555, 'd'), (4, 'e')]

# 由于一次性消费,所以必须再次初始一次
zip_prices = zip(prices.values(), prices.keys())
# 返回根据原来的vlaue值返回最小的对象
min_price = min(zip_prices)
print(min_price)  # (1, 'a')

# 返回根据原来的vlaue值返回最大的对象
zip_prices = zip(prices.values(), prices.keys())
max_price = max(zip_prices)
print(max_price)  # (555, 'd')


# 若,字典内存在多个相同value值的键值对,那zip会更具key为排序依据
prices = {'a': 1, 'b': 1, 'c': 555, 'd': 555, 'e': 4}
print(min(zip(prices.values(), prices.keys()))) # (1, 'a')
print(max(zip(prices.values(), prices.keys()))) # (555, 'd')

二、字典的集合操作,获取两个字典对象的相同或不同

注意!字典的value对象不支持集合操作!因为无法保证所有值都是唯一的。

a = {
    'x': 1,
    'y': 2,
    'z': 3,
}
b = {
    'x': 3,
    'y': 2,
    'z': 1,
}
# & 相同
print(a.keys() & b.keys())  # {'x', 'z', 'y'}
# print(a.values() & b.values()) # TypeError: unsupported operand type(s) for &: 'dict_values' and 'dict_values'
print(a.items() & b.items())  # {('y', 2)}

# - 不同
print(a.keys() - b.keys())  # set() 空集合
# print(a.values() - b.values())  # TypeError: unsupported operand type(s) for -: 'dict_values' and 'dict_values'
print(a.items() - b.items())  # {('z', 3), ('x', 1)}

# ^ 不同时包含于a和b的元素
print(a.keys() ^ b.keys())  # set() 空集合
# print(a.values() ^ b.values())  # TypeError: unsupported operand type(s) for ^: 'dict_values' and 'dict_values'
print(a.items() ^ b.items())  # {('x', 3), ('z', 1), ('x', 1), ('z', 3)}

# | a或b中包含的所有元素,去重
print(a.keys() | b.keys())  # {'z', 'x', 'y'}
# print(a.values() | b.values())  # TypeError: unsupported operand type(s) for |: 'dict_values' and 'dict_values'
print(a.items() | b.items())  # {('x', 3), ('x', 1), ('z', 1), ('z', 3), ('y', 2)}

猜你喜欢

转载自blog.csdn.net/qq_33961117/article/details/89136879