2012-11-11 5 views
0

"hasattr"또는 "isinstance"를 사용하여 개체 유형을 결정하는 것에 대한 토론이 많습니다. 그러나 numexpr에 대한 쿼리를 작성하려고하는 상황이 있습니다. 문자열을 인용 할 필요가 있지만 다른 값 나는 다음과 같은 코드를 사용하려고 하였다.Python 개체를 올바른 문자열 표현으로 변환하는 방법

def get_query(key_map): 
    """ 
    Generate an equality query, based on key/value 
    pair in key_map 
    """ 
    stmnt = "" 
    for k,v in key_map.items(): 
     value = '"%s"' % v if isinstance(v, str) else v 
     if not stmnt: 
      # first equality in statement 
      stmnt = "'(%s == %s)" % (k,value) 
     else: 
      stmnt += " & (%s == %s)" % (k,value) 

    if stmnt: 
     # close statement 
     stmnt += "'" 
    return stmnt 

나뿐만 아니라 hasattr를 사용하여 고려 :

value = '"%v"' % v if hasattr(v,'lower') else v 

나는 음악 교사가 한 번 괜찮아요 말해 한을 너만큼 규칙을 어기는거야. 지금 정확하게 어떻게 부러 뜨릴 지. 이것은 나에게 그러한 사례 중 하나처럼 보인다. 누구든지이 Python 코드를 구현하는 Python 적 방법에 대한 제안을 갖고 있습니까?

샘플 입력 :

key_map = {'symbol':'APPL', 'price':698.38'} 
샘플에서

, 나는 그것이 문자열이기 때문에 APPL을 인용 할 위,하지만 698.38, 그것은 부동이기 때문이다.

안부

+1

값 = ' "% s"'% v 항상 사용하지 않는 이유 –

+0

찾고있는 값이 문자열이 아니기 때문에. 그것이 datetime 객체이거나 float이면 비교가 실패합니다. –

+1

왜 계산 후에 'value'를 사용하지 않습니까? – Eric

답변

3

나는 당신이 이후가 무엇인지 생각 :

value = repr(v) 

은 또한, 두 번째 절반 결코 value 어쨌든을 사용하지 않습니다.

+0

감사합니다 Eric. 이것이 내가 필요한 것입니다. –

1

나를 놀라게하는 한 가지는 인용 부호입니다. 따옴표로 묶는 문자열에 이미 따옴표가 들어 있다고 가정합니다. @ Eric의 제안 된 답변은 당신을 위해 처리합니다. 문자열에 따옴표가 있으면 이스케이프 처리가 올바르게 처리됩니다.

관련 문제