Python将unicode字符串与字符串进行比较?

时间:2013-01-28 17:56:16

标签: python dictionary

我已经四处寻找并尝试.encode(...)字符串,但我无法想象这个问题和看起来一样严重。

我有两个数据结构,一个是从YAML文件加载的,另一个是从JSON文件加载的。

两个内容都已处理完毕(我正在迭代数据):

YAML词典

[{'SynID': 66, 'action': 'userInit', 'appLocation': 0},
 {'SynID': 66, 'action': 'isEngager', 'appLocation': 0}]

JSON字典

{u'name': u'SynID', u'value': u'66'}
...
{u'name': u'action', u'value': u'isEngager'}

最后,在进行比较时,涉及整数(非字符串)的任何内容都会失败。例如:

    if uriDict['name'] in expectedResultsSubDict and uriDict['value'] == expectedResultsSubDict[uriDict['name']]:
                Logger().l("[%s] Match: %s:%s == %s" % (pos, uriDict['name'], uriDict['value'], expectedResultsSubDict[uriDict['name']]))
    elif uriDict['name'] in expectedResultsSubDict:
         Logger().l("[%s] Name: %s, value: %s" % (pos, uriDict['name'], uriDict['value']))

第一个if语句无法匹配SynID的键/值:66,但是匹配第二个条目action:isEngager。

2013-01-28 12:48:42,151 : DEBUG : [0] Name: SynID, value: 66
2013-01-28 12:48:42,151 : DEBUG : [0] Match: action:userInit == userInit

正如您在输出中看到的,它与SynID不匹配,但与操作匹配。

如果我加上这一行:

elif uriDict['name'] in expectedResultsSubDict and int(uriDict['value']) == int(expectedResultsSubDict[uriDict['name']]):
    Logger().l("[%s] Int Match: %s:%s == %s" % (pos, uriDict['name'], uriDict['value'], expectedResultsSubDict[uriDict['name']]))

它将在SynID(和其他具有整数的字段)上正常工作但在字符串字段上失败。 我也尝试将'=='比较改为'是',在这种情况下,没有任何匹配。

问:如何比较字典的值?

2 个答案:

答案 0 :(得分:2)

您将66与'66'进行比较,它们不相等 - 一个是int,一个是字符串。 Python在类型之间没有隐式转换,因为它的“显性优于隐式”的哲学。为了使它工作,我先将两者转换为字符串,然后进行比较,如此

if uriDict['name'] in expectedResultsSubDict and str(uriDict['value']) == str(expectedResultsSubDict[uriDict['name']]):

答案 1 :(得分:0)

这里的unicode字符串没有问题:你将字符串与整数进行比较,得到False,因为,嗯,其中一个是字符串,另一个是整数。

您可以使用int(my_value_which_is_string_or_number)将值转换为整数。

相关问题