2017-09-24 1 views
0

사전의 한 키에서 값으로 목록을 필터링하고 목록의 요소를 int로 변환하고 싶습니다. 목록의 요소는 일 수 있습니다. ' 또는 ... 다음과 같이 바보 같은 코드가 있지만 어떻게 파이썬 방법이나 한 줄로 더 잘 만들 수 있습니까?dict의 목록에서 특정 요소를 필터링하십시오.

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

내가 업데이트 한 것을 좋아합니까? 빈 dict를 생성하고 그것을 반환? – 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]} 
>>> 

당신이 "파이썬"로 정의하는 것입니다. Comprehensions은 일반적으로 상당히 "불쾌한"것으로 간주되며, 이것은 사전 comprehnsion 내에서 목록 comprehension입니다!

그렇다면 함수가 PEP 표준을 충족하면 구문 적으로 정확하고 다른 프로그래머가 그 목적을 확인하기 위해 쉽게 검토 할 수없는 이유는 무엇입니까?

param에서 typing 구문을 사용하도록 압박하지 않은 한 다른 메모에서 제거하십시오.

관련 문제