[英]Python: Creating a dictionary using list comprehension from a list using lambda
從概念上講,這是我想要做的:
lookup = {'A': 'aaa', 'B': 'bbb', 'C': 'ccc'}
keys = ['A', 'B', 'Z'] # Note 'Z' does not exist in dict
result = {}
for key in keys:
if key in lookup:
result[key] = lookup[key]
else:
result[key] = None
上面的代碼產生以下內容,即
# result == {'A': 'aaa', 'Z': None, 'B': 'bbb'}
根據本文中有關字典理解語法的建議,我可以使用v2.6語法執行以下操作:
result = dict((lambda x: (x, lookup[x]) if x in lookup else (x, None))(key) for key in keys)
哪個起作用並產生相同的結果。
但是,我希望能夠以v2.7樣式執行以下操作(在上面的帖子中也提到了)。 但這似乎不起作用,
result = { (lambda x: x: a_dict[x] if x in a_dict else x: None)(key) for key in a_list }
我似乎相抵觸使用的運行:
在表示一鍵拉姆達這一點。 我還回顧了原始PEP中給出的示例。 他們也沒有提供任何指導。 以下是命令行的輸出:
>>> result = { (lambda x: x : a_dict[x] if x in a_dict else x: None)(key) for key in a_list }
File "<stdin>", line 1
result = { (lambda x: x : a_dict[x] if x in a_dict else x: None)(key) for key in a_list }
^
SyntaxError: invalid syntax
我究竟做錯了什么? 是否可以做我想做的事情,即使用Lambda字典理解的v2.7語法?
請注意,我只是出於好奇而問。 並不是我有寫這樣的生產代碼的強迫性,而是需要專家理解的代碼!
PS:我應該提到另外兩個相關的帖子,在嘗試執行此操作時我發現它們很有幫助。 首先是在列表理解中使用lambda。 另一個是使用list創建字典 。
若要使用字典理解功能進行操作,應使用dict.get()
方法。 范例-
>>> lookup = {'A': 'aaa', 'B': 'bbb', 'C': 'ccc'}
>>> keys = ['A', 'B', 'Z']
>>> result = {key:lookup.get(key) for key in keys}
>>> result
{'Z': None, 'A': 'aaa', 'B': 'bbb'}
如果字典中不存在鍵,則dict.get()
返回None
。 您也可以為dict.get()
指定第二個參數,如果要獲取的鍵在詞典中不存在,則該參數將作為返回的默認值。
要回答這個問題,您不能使用lambda
在字典lambda
中返回類似key:value的對(因為:
語法無效)。 如果要這樣做,則應將dict()
函數與生成器表達式結合使用,例如-
result = dict((lambda x: (x,a_dict[x]) if x in a_dict else (x,None))(key) for key in a_list)
或更易讀的map()
版本-
result = dict(map((lambda x: (x,a_dict[x]) if x in a_dict else (x,None)), a_list)
您可以嘗試通過簡單的字典理解來完成以下任務:
result = {k: lookup.get(k) for k in keys}
k
是鍵, lookup.get(k)
是值。 .get()
將從字典中獲取鍵的值;如果不存在,則從None
。 也可以將默認值設置為第二個參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.