Python入門(3)——基本語法-數據類型之字典

字典(dictionary)

字典在某些語言中可能稱爲 聯合內存 (associative memories) 或 聯合數組 (associative arrays)。序列是以連續的整數爲索引,與此不一樣的是,字典以"關鍵字"爲索引,關鍵字能夠是任意不可變類型,一般用字符串或數值。若是元組中只包含字符串和數字,它能夠做爲關鍵字,若是它直接或間接地包含了可變對象,就不能當作關鍵字。不能用列表作關鍵字,由於列表能夠用索引、切割或者 append() 和 extend() 等方法改變。html

字典是無序的鍵:值對 (key:value 對)集合,鍵必須是互不相同的(在同一個字典以內)。使用大括號建立一個空的字典:{}。初始化列表時,在大括號內放置一組逗號分隔的鍵:值對,這也是字典輸出的方式。數組

字典的主要操做是依據鍵來存儲和取值。也能夠用 del 來刪除鍵:值對(key:value),從一個不存在的鍵中取值會致使錯誤。瀏覽器

In [2]:

tel = {'jack': 4098, 'sape': 4139}tel['guido'] = 4127print telprint tel['jack']
{'sape': 4139, 'jack': 4098, 'guido': 4127}
4098
In [3]:

del tel['sape']tel['irv'] = 4127print telprint tel.keys()print'guido' in tel
{'jack': 4098, 'irv': 4127, 'guido': 4127}
['jack', 'irv', 'guido']
True

 

常見字典操做方法

  • D.clear()刪除字典內全部元素
  • D.copy()返回一個字典的複製
  • D.fromkeys(seq,val)建立一個新字典,以序列seq中元素作字典的鍵,val爲字典全部鍵對應的初始值
  • D.get(key, default=None)返回指定鍵的值,若是值不在字典中返回default值
  • D.has_key(key)若是鍵在字典dict裏返回true,不然返回false
  • D.items()以列表返回可遍歷的(鍵, 值) 元組數組
  • D.keys()以列表返回一個字典全部的鍵
  • D.setdefault(key, default=None)和get()相似, 但若是鍵不存在於字典中,將會添加鍵並將值設爲default
  • D.update(dict2)把字典dict2的鍵/值對更新到dict裏
  • D.values()以列表返回字典中的全部值
  • D.pop(key)刪除一個鍵並返回它的值,相似於列表的pop,只不過刪除的是一個鍵不是一個可選的位置
  • del D[key]刪除鍵
  • D[key] = 42新增或修改鍵

 

字典用法注意事項:

  1. 序列運算無效,字典元素間是沒有順序的概念數據結構

  2. 對新索引賦值會添加項app

  3. 鍵不必定老是字符串函數

 

字典鍵也經常使用於實現稀疏數據結構。例如,**數組中只有少數位置上有存儲的值:ui

In [5]:

tel.get('kkk',0) #返回指定鍵的值,若是值不在字典中返回default值
Out[5]:

0

 

多種構造字典方式

dict() 構造函數能夠直接從 key-value 對中建立字典spa

In [6]:

dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
Out[6]:

{'guido': 4127, 'jack': 4098, 'sape': 4139}
In [7]:

dict.fromkeys(['a','b'],0) #建立一個新字典,以序列seq中元素作字典的鍵,val爲字典全部鍵對應的初始值
Out[7]:

{'a': 0, 'b': 0}
In [8]:

dict(zip(['a','b','c'],[1,2,3]))
Out[8]:

{'a': 1, 'b': 2, 'c': 3}
In [9]:

{k:v for (k,v) in zip(['a','b','c'],[1,2,3])}
Out[9]:

{'a': 1, 'b': 2, 'c': 3}

 

此外,字典推導式能夠從任意的鍵值表達式中建立字典:code

In [10]:

{x: x**2 for x in (2, 4, 6)}
Out[10]:

{2: 4, 4: 16, 6: 36}

 

若是關鍵字都是簡單的字符串,有時經過關鍵字參數指定 key-value 對更爲方便:htm

In [11]:

D = dict(a=1,b=2,c=3)D 
Out[11]:

{'a': 1, 'b': 2, 'c': 3}
In [12]:

{c:c*4 for c in 'JoinQuant'}#默認是集合
Out[12]:

{'J': 'JJJJ',
 'Q': 'QQQQ',
 'a': 'aaaa',
 'i': 'iiii',
 'n': 'nnnn',
 'o': 'oooo',
 't': 'tttt',
 'u': 'uuuu'}
In [13]:

{c:c*4 for c in ['JoinQuant']}
Out[13]:

{'JoinQuant': 'JoinQuantJoinQuantJoinQuantJoinQuant'}
In [14]:

{c.lower():c*4+'!' for c in 'JoinQuant'}
Out[14]:

{'a': 'aaaa!',
 'i': 'iiii!',
 'j': 'JJJJ!',
 'n': 'nnnn!',
 'o': 'oooo!',
 'q': 'QQQQ!',
 't': 'tttt!',
 'u': 'uuuu!'}

 

注意:

咱們通常都很願意使用DataFrame,由於它方便,顯示清楚,可是其建立和操做速度較慢,若是你對程序運行速度有較高要求, 能夠考慮使用dict。目前平臺中使用到的字典主要有:

  • handle_data(context, data)裏的data是一個字典(dict), key是股票代碼, value是當時的SecurityUnitData 對象
  • get_open_orders(),得到當天的全部未完成的訂單,返回一個dict, key是order_id, value是Order對象
  • get_orders(),獲取當天的全部訂單,返回一個dict, key是order_id, value是Order對象
  • get_trades(),獲取當天的全部成交記錄, 一個訂單可能分屢次成交,返回一個dict, key是trade_id, value是Trade對象
  • get_current_data(security_list=None),獲取當天的開盤價、漲跌停價等,返回一個dict, key是股票代碼, value是當天的開盤價、漲跌停價等信息
  • Portfolio中,positions 當前持有的可賣出的股票, 返回一個dict, key是股票代碼, value是Position對象。 unsell_positions 當前持有的不可賣出的股票(好比T+1, 當前購票的股票), 一個dict, key是股票代碼, value是Position對象.
  • history,attribute_history,get_extras中,若是df=True, 返回pandas.DataFrame, 不然返回一個dict, key是股票代碼, 值是一個numpy數組numpy.ndarray, 對應上面的DataFrame的每一列。

具體能夠在瀏覽器中按快捷鍵Ctrl + F,搜索「dict」,查看詳細幫助。

In [ ]:

相關閱讀:

Python入門(4)——基本語法 - 數據類型3之元組、集合

相關文章
相關標籤/搜索