2017-03-23 40 views
2

我有三个文本文件。 的一个(zoo.txt)看起来是这样的:“String”和“int”类型的字典与“Unicode”类型的字典进行比较

{'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中的键值必须等于标准值。

的single_value.txt样子:

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'} 

我的问题是:

IDnumber 1.8.70 
type 1 

并且还具有功能读取由

  1. 我是否需要将所有类型(str,int和unicode)转换为unicode或str,然后进行比较?因为我使用数学运算符(<,==,>)直接进行比较,所以无法得到正确的答案。
  2. 如果我需要转移类型,该怎么做?

请给我一个手〜非常感谢〜

回答

0

不,你并不需要的ASCII字符串转换为Unicode或反之亦然转换,因为ASCII是Unicode的一个子集,因此他们的行为理智,当你做相等测试,如

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

输出

True 

那代码将在Python 2或Python 3中正常工作。

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

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的

+0

非常感谢你〜它的工作原理〜 –