我想将列表作为字典的一个键的值过滤,并将列表中的元素转换为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))
答案 0 :(得分: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()}
来说明可分离的字典和列表处理(并且不会感觉像是满口)。
答案 1 :(得分: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]}
>>>
这归结为你所定义的“pythonic”。理解通常被认为是相当“pythonic”,这是字典complehnsion中的列表理解!
那就是说,如果函数符合PEP标准,在语法上是正确的,并且很容易被另一个程序员审查以确定其目的,为什么要改变它呢?
另外请注意,除非您按下params中的typing
语法,否则请将其删除。