“String”和“int”类型字典与“Unicode”类型字典

时间:2017-03-23 08:25:37

标签: python python-2.7

我有三个文本文件。 一个(zoo.txt)看起来像这样:

{'cow':'113', 'cat':'50', 'dog':'100', 'IDnumber':'113.1.22', 'type':'3'}

它由json函数读取:

file_open = open('zoo.txt', 'r')
zoo_animal = file_open.read()
zoo_animal = json.loads(zoo_animal)

在函数之后,输出如下:

{u'cow':u'113', u'cat':u'50', u'dog':u'100', u'IDnumber':u'113.1.22', u'type':u'3'}

另一个是in_range.txt,这意味着zoo.txt中key的值必须在此标准范围内匹配。 in_range.txt看起来像:

cow 1 150
cat 0 25
dog 0 50

它用函数读取:

with open('in_range.txt', 'r') as g:
for line in g:
    spliteLineR=line.split()
    in_range[str(spliteLineR[0])]=[int(spliteLineR[1]),int(spliteLineR[2])]

输出结果为:

{'cow':[1,150], 'cat':[0,25], 'dog':[0,50]}

第三个文本文件是single_value.txt,这意味着zoo.txt中key的值必须等于标准值。

single_value.txt如下所示:

IDnumber 1.8.70
type 1

它还可以通过函数读取:

with open('single_value.txt', 'r') as f:
    for line in f:
        spliteLineS=line.split()
        single_value[str(spliteLineS[0])]=str(spliteLineS[1])

输出结果为:

{'IDnumber':'1.8.70', 'type':'1'}

我的问题是:

  1. 我是否需要将所有类型(str,int和unicode)转移到unicode或str然后进行比较?因为我使用数学运算符(<,==,>)来直接比较,所以无法得到正确答案。
  2. 如果我需要转移类型,怎么办?
  3. 请帮我一把〜非常感谢〜

1 个答案:

答案 0 :(得分:0)

不,您不需要将ASCII字符串转换为Unicode,反之亦然,因为ASCII是Unicode的一个子集,所以当您进行相等测试时它们会表现得很明智,例如

print('cow' == u'cow')

<强>输出

True

该代码可以在Python 2或Python 3中正常运行。

但是, do 必须将这些数字字符串转换为数字类型才能执行数字比较。这是一个简短的演示。

from __future__ import print_function

zoo_animal = {
    u'cow':u'113', u'cat':u'50', u'dog':u'100',
    u'IDnumber':u'113.1.22', u'type':u'3',
}
in_range = {'cow':[1, 150], 'cat':[0, 25], 'dog':[0, 50]}

for key in zoo_animal:
    if key in in_range:
        lo, hi = in_range[key]
        val = int(zoo_animal[key])
        print(key, val, lo <= val <= hi) 

<强>输出

cow 113 True
cat 50 False
dog 100 False

再一次,该代码适用于Python 2和Python 3。