Python - 字典的使用优化和应用技巧 - Go语言中文社区

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')

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

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对象不支持集合操作!因为无法保证所有值都是唯一的。

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)}

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_33961117/article/details/89136879
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-02-13 14:52:01
  • 阅读 ( 1063 )
  • 分类:Go应用

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢