[英]Difference between dict and set (python)
Python 2 中沒有集合文字,歷史上大括號僅用於字典。 集合可以從列表(或任何可迭代對象)中生成:
set([1, 2, 3])
set([i for i in range(1, 3)])
Python 3 引入了集合文字和推導式(參見PEP-3100 ),這讓我們可以避免使用中間列表:
{1, 2, 3}
{i for i in range(1, 3)}
但是,由於向后兼容,空集形式是為字典保留的。 P3K 中 [Python-3000] 集的引用? 狀態:
我相信我們可以解決一些問題 --- 我同意,
{}
用於空集和{:}
用於空 dict 將是理想的,如果不是為了向后兼容。 當我第一次編寫 PEP 時,我喜歡“特殊空對象”的想法(即,讓{}
成為可以變成集合或字典的東西),但這里的一位講師說服我,這只會導致混淆新人的想法(以及實施起來的痛苦)。
以下消息更好地描述了這些規則:
我認為 Guido 有最好的解決方案。 將
set()
用於空集,將{}
用於空字典,將{genexp}
用於集合推導/顯示,將{1,2,3}
用於顯式集合文字,將{k1:v1, k2:v2}
用於字典文字。 如果需求超過厭惡,我們總是可以稍后添加{
/}
。
語法不一樣。 字典首先使用花括號,然后指定鍵值對,其中鍵和值由冒號分隔:
>>> {'foo': 'bar'}
{'foo': 'bar'}
>>> type(_)
<type 'dict'>
后來集合被添加到語言中, {..}
大括號符號只命名元素,而不是對:
>>> {'foo'}
set(['foo'])
>>> type(_)
<type 'set'>
請注意,在 Python 2 中,解釋器使用可調用的set()
來回顯對象。 這也是您指定空集的方式:
>>> emptyset = set()
在 Python 3 中,回顯對象時使用較新的{..}
表示法,除非它為空:
>>> {'foo'}
{'foo'}
>>> _ - {'foo'} # difference, removing the one element
set()
set()
類型在2.4 版中被添加到 Python 語言中(參見PEP 218 ),集合文字的花括號語法被添加到 Python 3 中並向后移植到 Python 2.7中。
{}
用於空字典而不是空集這一事實在很大程度上具有歷史原因。 字典的語法{'a': 100, 'b': 200}
自 Python 誕生以來就已經存在。 集合的語法{1, 2, 3}
是在 Python 2.7 中引入的。 由於{}
已經使用了很長時間,它將作為定義空字典的方式保留下來。 如果 Python 從一開始就有新的集合語法,那么可能會用{}
定義一個空集合,用{:}
定義一個空字典。
集合是無序的集合。 字典是一種無序的數據集合,以鍵值對的形式存儲數據。 字典和集合使用哈希表來實現 O(1) 查找和插入。 數據結構文檔參考: https ://docs.python.org/3/tutorial/datastructures.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.