2017-09-24 60 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语法,否则请将其删除。