文字列を検索して.encode(...)しようとしましたが、この問題が思ったほど深刻であるとは想像できません。
2つのデータ構造があります。1つはYAMLファイルから読み込まれ、もう1つは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のキー/値と一致しませんが、2番目のエントリ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(およびintを持つ他のフィールド)では正しく機能しますが、文字列フィールドでは失敗します。また、「==」の比較を「is」に変更してみましたが、その場合、一致するものはありませんでした。
Q)辞書の値を比較するにはどうすればよいですか?