2017-09-24 84 views
0

我想過濾一個列表作爲字典的一個鍵的值,並將列表中的元素轉換爲int。列表中的元素可能有''... 我有一些愚蠢的代碼如下,但如何可以有更多pythonic方式或一行來做到這一點?從字典中的列表中過濾特定元素

def fil(d:dict): 
    rtn = dict() 
    for k, v in d.items(): 
     rtn[k] = [int(x) for x in v if x and x != '...'] 
    return rtn 

d = dict(name=['1', '2', '3', '4', '5'], state=['21', '', '22', '...', '23'], number=['11', '...', '12', '13']) 
print(fil(d)) 
+1

你有什麼是好的。唯一值得改變的地方是:要麼就地操作,不要返回任何價值,要麼創建一個副本並將其返回。不要修改*和*返回對象。 – wim

+0

就像我已更新?創建了一個空字典並返回它? – jacobcan118

回答

0

你當然可以使用字典解析和列表解析其降低到一個行:

{k:[int(x) for x in v if x and x != '...'] for k,v in d.items()} 

另一種方法是僅僅定義列表轉變爲一個函數,然後寫{k:fil(v) for k,v in d.items()}它說明了可分離的字典和列表處理(並且感覺不那麼滿口)。

0

如果你正在尋找一種「pythonic」方式,我會說你有什麼好。

如果你正在尋找一個班輪,那麼也許:

>>> def fil(d): 
     return {k: [int(x) for x in v if x and x != '...'] for k, v in d.items()} 

>>> d = dict(name=['1', '2', '3', '4', '5'], state=['21', '', '22', '...', '23'], number=['11', '...', '12', '13']) 
>>> print (fil(d)) 
{'name': [1, 2, 3, 4, 5], 'state': [21, 22, 23], 'number': [11, 12, 13]} 
>>> 

這是什麼歸結爲是你所定義的「Python化」。理解通常被認爲是相當「pythonic」,這是一個詞典comprehnsion內的列表理解!這就是說,如果函數符合PEP標準,在語法上是正確的,並且不能容易地被另一個程序員檢查以確定其目的,爲什麼改變它?

在另一個說明中,除非按下在參數中使用typing語法,否則請將其刪除。