您的位置:首页 > 编程语言 > Python开发

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

2019-04-09 10:41 555 查看

目录

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

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

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

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

[code]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')

1-1 zip() 基于元组、列表实现字典

[code]def get_dict(result, *args):
print(result) # ('ARCRY',)
print(*args) # ['name']
print(dict(zip(*args, result))) # {'name': 'ARCRY'}

print(zip(*args, result)) # <zip object at 0x00000192979E9D88>
print(dict(zip(result, *args))) # {'ARCRY': 'name'}

return dict(zip(*args, result))

# ------------
def get_dict(result, *args):
return dict(zip(*args, result))

res = get_dict(('ARCRY',), ['name'])
# {'name': 'ARCRY'}
get_dict(('ARCRY','aaaa'), ['name','2222'])
# {'name': 'ARCRY', '2222': 'aaaa'}

 

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

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

[code]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)}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: