我正在尝试比较json格式文件中的键“rrname”的值,jadata dic(每行是一个字典),字典d的键已经加载到内存中。
这是我的代码: import simplejson
ap = '/data/data/2014/A.1/ap.txt'
ddb = '/data/data/2014/A.1/test'
d={}
f = open(ap,'r')
g = open(ddb,'r')
for line in f:
domain,bl_date= line.split('|')
d[domain]=bl_date
for line in g:
line=line.strip('')
try:
jdata = simplejson.loads(line)
if jdata.get('rrname') == d.keys():
print rrname
except:
raise
这是我的ddb文件:
{"rrname": "bba186684.alshamil.net.ae.", "time_last": 1389295255, "time_first": 1389241418, }
{"rrname": "bba186686.alshamil.net.ae.", "time_last": 1390910891, "time_first": 1390910891}
{"rrname": "0001ewm.rcomhost.com", "time_last": 1390147425, "time_first": 1390124988}
这里是ap文件:
0001elk.rcomhost.com|1391726703
0001ewm.rcomhost.com|1393472522
0001qz6.wcomhost.com|1399977648
当我运行此代码时,它找不到相似之处,尽管有。有人可以帮我吗?
答案 0 :(得分:2)
jdata.get('rrname') == d.keys()
总是会失败 - ==
左侧的单个条目不会与您要求的右侧所有条目相同。
相反,检查是否:
jdata.get('rrname') in d
in
运算符会在右侧查找左侧包含。使用d
,而非 d.keys()
作为右侧的性能非常重要,因为检查字典中的包含要比检查列表快得多(如{{ 1}}将在Python 2中,我猜你正在使用它,即使你没有告诉我们!,基于.keys
的语法: - )。