2015-01-31 1 views
0

Я пытаюсь сравнить значения ключа «rrname» в файле формата json, jadata dic (каждая строка - это словарь) с ключами словаря d, который уже загружен в память.Python: сравнение строк файла с ключами словаря в памяти

Вот мой код: импорт 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} 

здесь ар файла:

0001elk.rcomhost.com|1391726703 
0001ewm.rcomhost.com|1393472522 
0001qz6.wcomhost.com|1399977648 

, когда я запускаю этот код, он не может найти сходства, хотя есть. Может ли кто-нибудь помочь мне с этим?

+0

Вы можете вставить содержимое 'apwg2014.txt'? – levi

+0

@levi sure, just edited – UserYmY

+3

Должен 'if jdata.get ('rrname') == d.keys()' be 'если jdata.get ('rrname') в d.keys()'? Должно ли 'print rrname' быть' print jdata.get ('rrname') '? –

ответ

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

всегда будет терпеть неудачу - единственный вход слева от == не будет равна все записи справа, как вы просите.

Скорее всего, проверьте:

jdata.get('rrname') in d 

Оператор in ищет с левой стороны, чтобы быть содержали в правой части. Для производительности важно использовать d, неd.keys(), так как проверка на локализацию в словаре намного быстрее, чем проверка в списке (так как .keys будет в Python 2, и я думаю, это то, что вы используя, хотя вы не говорите нам !, на основе синтаксиса для этого print :-).