Python:比较文件的行与内存中字典的键

时间:2015-01-31 15:53:27

标签: python dictionary

我正在尝试比较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

当我运行此代码时,它找不到相似之处,尽管有。有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

jdata.get('rrname') == d.keys()

总是会失败 - ==左侧的单个条目不会与您要求的右侧所有条目相同。

相反,检查是否:

jdata.get('rrname') in d

in运算符会在右侧查找左侧包含。使用d而非 d.keys()作为右侧的性能非常重要,因为检查字典中的包含要比检查列表快得多(如{{ 1}}将在Python 2中,我猜你正在使用它,即使你没有告诉我们!,基于.keys的语法: - )。