其他
数据类型——Dict、Set与Frozenset简析
本文作者:李钊颖
文字编辑:余术玲
技术总编:张 邯
In [1]:dicta={} #定义一个空字典
In [2]: dictb={'sam':1,'william':2,'ben':1}
In [3]: dictb
Out[3]: {'sam': 1, 'william': 2, 'ben': 1}
In [4]: dictc={'naen':4, (1,):2} #字典的键可以是元组,这里的“(1,)”为只有一个元素的元组
In [5]: dictc
Out[5]: {'naen': 4, '5': 6, '7': {8}, (1,): 2}
In [6]: dictc={'naen':4,'5':6,'7':{8}} #字典的值可以是字典
In [7]: dictc
Out[7]: {'naen': 4, '5': 6, '7': {8}}
In [8]: dictc={'naen':4,'5':6,'7':{8},[1]:2}
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-a8fd8b025869> in <module>
----> 1 dictc={'naen':4,'5':6,'7':{8},[1]:2}
TypeError: unhashable type: 'list'
In [9]: dictc[2]
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-6-bb4c2b9ea2a9> in <module>
----> 1 dictc[2]
KeyError: 2 #字典不能通过索引来查找对应的值
In [10]: dictc['naen'] #若想查找对应的值,只能通过访问键来查找对应的值
Out[10]: 4
字典在Python3.6之前是无序的,顺序访问字典时可能与输入的顺序不一致,这是字典对键进行哈希运算再确定存储位置导致的,所以使用3.5版本的读者可能会遇到for循环遍历时的顺序与录入顺序不一致的情况。在Python3.6以后,对字典进行了优化,这也间接导致访问字典的顺序与输入顺序一致了,所以字典成为了有序组合。
In [11]: dictc['5']=10
In [12]: dictc
Out[12]: {'naen': 4, '5': 10, '7': {8}} #可以看到键'5'对应的值由6被修改为10
当字典中没有这个键值对时,则创建新的键值对:
In [13]: dictc['emma']='girl'
In [14]: dictc
Out[14]: {'naen': 4, '5': '10', '7': {8}, 'emma': 'girl'} #创建为新的键值
In [15]: for i in dic1:
: print(i)
name
age
hobby
In [16]: member = {'Sam', 'William', 'Bentley'} #定义一个非空集合
In [17]: member
Out[17]: {'Bentley', 'Sam', 'William'}
In [18]: a = 'Julia'
In [19]: if a in member:
: print(f'{a}在集合中')
: else:
: print(f'{a}不在集合中')
Julia 不在集合中
In [20]: Aya = set([12,'baidu','weibo','tencent','facebook'])
In [21]: Aya
Out[21]: {12, 'baidu', 'facebook', 'tencent', 'weibo'} #元素的顺序改变了
创建可变集合set,元素顺序排列不一定是按照我们输入的顺序排列。
In [22]: fruit = set(['apple','banana','orange','apple','orange'])
In [23]: fruit
Out[23]: {'apple', 'banana', 'orange'} #重复元素不见了
集合自动将重复的元素过滤删除掉了。
In [24]: color = set(['red','yellow','orange'])
In [25]: fruit & color
Out[25]: {'orange'} #留下的是两个集合的共同元素
In [26]: fruit | color
Out[26]: {'apple', 'banana', 'orange', 'red', 'yellow'} #两个集合的非重复元素拼接
In [27]: fruit - color
Out[27]: {'apple', 'banana'}
In [28]: color - fruit
Out[28]: {'red', 'yellow'}
In [29]: fruit ^ color
Out[29]: {'apple', 'banana', 'red', 'yellow'} #删除重复元素,只留下不同元素
In [30]: A = frozenset('book')
In [31]: A
Out[31]: frozenset({'b', 'k', 'o'}) # frozenset()也可自动过滤重复元素
In [32]: A.add('m')
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-3-5047f2bff51e> in <module>
----> 1 A.add('m')
AttributeError: 'frozenset' object has no attribute 'add'
In [33]: for i in A:
: print(i)
k
b
o
例如集合间的运算:
In [34]: B = set('pen') #创建一个可变集合
此时A为不可变集合,B为可变集合,对两个集合做并集运算:
In [35]: B = set('pen') #创建一个可变集合
此时A为不可变集合,B为可变集合,对两个集合做并集运算:
In [36]: A | B
Out[36]: frozenset({'b', 'e', 'k', 'n', 'o', 'p'}) #输出不可变集合
In [37]: B | A
Out[37]: {'b', 'e', 'k', 'n', 'o', 'p'} #输出可变集合
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
万般进制千机变,Python一计乾坤定——利用Python来进行进制转换
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。