如何将Python对象转换为正确的字符串表示形式

时间:2012-11-11 16:32:09

标签: python

关于使用“hasattr”或“isinstance来确定对象类型的争论很多。但是,我有一种情况,我正在尝试为numexpr构建查询,我需要引用字符串,但不是其他值。我打算使用以下代码:

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

我有一位音乐老师曾经告诉我,只要你知道如何正确地打破它们,就可以违反规则。这对我来说似乎就是其中之一。有没有人建议采用更Pythonic方式来实现这段代码?

示例输入:

key_map = {'symbol':'APPL', 'price':698.38'}

在上面的示例中,我想引用APPL,因为它是一个字符串,但不是698.38,因为它是一个浮点数。

此致

2 个答案:

答案 0 :(得分:3)

我认为你可能会追求的是:

value = repr(v)

此外,你的下半场从不使用value

答案 1 :(得分:1)

然而,有一件事让我印象深刻的是你的引号。假设您用引号括起来的字符串已经包含引号。 @ Eric提出的答案会为你解决这个问题,如果有的话,它会正确地处理字符串中的引号。