Python基础---Task06:字典和集合

dict字典

dictionary = {key : value,…}
key 和 value 可重复

创建和搜索字典键值

1.创建

# 创建单键映射单值dict
dict1 = dict(Alibaba ='Taobao', Baidu ='BaiduMap', Tengxun ='QQ') #dict格式:{'key':content,...}

# 创建单键映射多值dict
from collections import defaultdict
dict2 = defaultdict(list) #创建元素是list的dict
dict2['language'].append('C++') # 为单键添加多映射
dict2['language'].append('python')

print(dict2)
>> defaultdict(<class 'list'>, {'language': ['C++', 'python']})

  • 注意:用dict(keyname = value )创建dict时,keyname不能加引号

2.搜索

print('T' in dict2) #查找'T'是否在dict2

print(dict2.keys(),' ',dict2.values(),' ',dict2.items())
# 返回dict2所有key, dict2所有value, dict2所有(key,value)

print(dict1.get('W','no key'))
#dict.get(key,'没找到key时返回的语句')---有key返回value, 没有返回None和'xxx'

比较和运算

dict2 = {'Alibaba':1999,'Baid':2000,'Tengxun':1998,'Wangyi':1997,'Jingdong':1998}
dict1.keys() & dict2.keys() # 返回keys交集
>> Out[19]: {'Alibaba', 'Tengxun'}

dict1.keys() - dict2.keys() # 返回keys差集
## 同理.items(), 不能用于.values()
>> Out[20]: {'Baidu'}

# 代数运算默认作用于key
print(min(dict2))
>> Alibaba

min(dict2, key=lambda k : dict2[k]) # 返回最小value对应的key
>> Out[24]: 'Wangyi'
# 当多个实体拥有相同的值的时候,拥有最小或最大键的实体会返回

  • ** 注意:代数运算默认作用于key

排序

rows = [
    {'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
    {'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
    {'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
    {'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]

from operator import itemgetter # 用itemgetter模块
# 单键或多键排序
rows_by_fname = sorted(rows, key=itemgetter('fname'))
# 以fname为准,排序rows
print(rows_by_fname)

rows_by_name = sorted(rows, key=itemgetter('lname','fname'))
# 以fname & lname 为准,排序rows
print(rows_by_name) # 原理???

max(rows, key=itemgetter('uid')) # 返回uid最大对应的key

set集合

集合中不存才重复元素,理论上集合大小不可变,但可以用

创建

set = set()
用help(set)查看你函数功能

s1 = set([1,2,3])   #s1,s2 是变量,它的值可以通过赋值更改;但set()是不变量,不能通过赋值改变元素值或者个数
s2 = set([2,3,4])
print(s1,s2)
>> {1, 2, 3} {2, 3, 4, 6}


s1.add(4)      #set()只能有一个元素,不能改变元素,可用list伪增删改
print(s1)      # {1, 2, 3, 4}
print(s1 & s2) # 取交集
>> {2, 3, 4}
print(s1 | s2)   # 取并集
>> {1, 2, 3, 4, 6}

参考文献:

python3cookbook:
https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html

字典集合Python中都是一种数据结构,但它们有一些区别。 首先,字典是由键(key)和值(value)配对组成的元素的集合,而集合是一系列无序的、唯一的元素组合。字典可以通过键来访问对应的值,如果键不存在,则会抛出异常;而集合不支持索引操作,只能通过值来判断元素是否存在。 其次,字典集合的性能表现也有所不同。字典的查找、添加和删除操作都可以在常数时间复杂度内完成,而集合的性能也非常高效。因此,在需要高效地进行查找和去重操作时,字典集合都是很好的选择。 此外,字典集合的内部结构都是一张哈希表,但字典存储了键、值和哈希值这三个元素,而集合内只存储了哈希值。这也是导致字典可以通过键来索引值,而集合不支持索引操作的原因。 综上所述,字典集合的区别在于字典是键值对的集合,支持通过键来访问值,而集合是无序的、唯一的元素组合,不支持索引操作。同时,字典集合在性能上都表现出色,适用于不同的场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python_数据结构_字典集合的差异对比](https://blog.csdn.net/feizuiku0116/article/details/119777675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python中的字典集合有什么区别?](https://blog.csdn.net/2301_78316786/article/details/131133549)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值