簡體   English   中英

Python構造字典數據類型?

[英]Python construct a dictionary data type?

我是python的新手,剛遇到了這個語句

data = dict( (k, v) for k, v in data.items() if v != 'null')

我真的不是他們在這里做什么來構建字典。 你能給我解釋一下嗎? 為什么要在dict()中使用for循環,為什么還要使用if? 我在python文檔中沒有看到類似的東西。

多謝你們

該代碼使用dict構造函數創建一個新的字典。 構造函數可以采用鍵,值對的可迭代方式來初始化新字典。 正如其他人指出的那樣,示例代碼具有生成器表達式 ,該表達式創建鍵,值對的此可迭代項。

生成器表達式的作用有點像列表,可以這樣重寫:

mylist = []
for k, v in data.items():
    if v != 'null':
        mylist.append((k, v))

但是它從來沒有真正創建過一個列表,它只是依次生成每個值,並由dict構造函數進行處理。

至於為什么if出現在循環之后,這是python開發人員選擇的語法,因此您必須詢問他們。 但是請注意,在我重新生成的生成器表達式中, if語句位於for語句內(即之后)。

我已經鏈接到python文檔中有關生成器表達式的部分,但是應unkulunkulu的要求,這里還有更多內容:

  1. 卡爾·格羅納(Carl's Groner)的列表理解簡介
  2. 弗雷德里克·哈德 Fredrik Haard)的“ 如何(有效)解釋列表理解”

dict()的參數是一個生成器表達式,該表達式生成元組,該元組由從data.items()得出的鍵,值對(即(k, v) )組成。 dict()內置函數可以從此類元組的列表或序列中自動構造字典對象,例如:

>>> kvs = [('a', 1), ('b', 2)]
>>> dict(kvs)
{'a': 1, 'b': 2}

if v != 'null'限定詞指示生成器忽略/跳過那些值(即,元組中的第二項)等於'null'元素(更確切地說,它僅產生那些值是不等於'null' )。

有關生成器表達式的詳細說明,請參見PEP 289

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM