Печать ключа словаря, если в списке CSV были найдены значения - PullRequest
0 голосов
/ 03 октября 2018

Я довольно новичок в python, так что простите, если это длинное объяснение простой проблемы.Мне нужна помощь в понимании того, как использовать словарь для поиска совпадений из списка CSV, а затем распечатать ключ в выводе типа отчета.

Цель: У меня есть список открытых данных о конфиденциальности, таких как номера социального страхования.Мне нужно сравнить хэш этого открытого текста и в то же время скрыть открытый текст с последними 4 цифрами (XXX-XX-1245).Если совпадение моего хэша в виде открытого текста совпадает с хэшем, который у меня уже был в поиске CSV, я делаю мини-отчет, в котором содержится демографическая информация о том, кому может принадлежать найденный хеш.Кроме того, поскольку нет ничего легкого, в мини-отчете необходимо напечатать скрытое значение SPI.

вывод должен выглядеть следующим образом, если хэш, который я только что сгенерировал, соответствует хэшу столбца 2 в моей электронной таблице:

user@gmail.com Full Name Another Full Name xxx-xx-1234  location1 location2

Задача :Все хеширование, запутывание и сопоставление выполняется и сохраняется в списках и работает правильно.Мне нужна помощь, чтобы выяснить, как напечатать ключ из словаря с другими моими столбцами ниже, не печатая весь набор каждый раз в цикле for.

Это работает за пределами моего читателя:

 for i in hashes_ssnxxxx:
        print(i)

, но я не знаю, как принять это значение и вставить его в свое утверждение для печати внутри читателя.

clear_text_hash = [] #Where Hash of clear text value found is stored
obfuscate_xxxxssn = [] #Where obfuscated SPI found by using re.sub is stored

#Zip them in a dictonary to keep the two related
hashes_and_ssnxxxx = dict(zip(obfuscate_xxxxssn,clear_text_hash))

book_of_record = open('path\to\bookofrecord.csv', 'rt',  encoding='UTF-8')
a1 = csv.reader(book_of_record, delimiter=',')

for row in a1:
    hashes = row[2] 
    if hashes in hashes_ssnxxxx.values():
        print(row[16], row[6], hashes_ssnxxxx.keys(), row[13], row[35], row[18], row[43])

ОБНОВЛЕНИЕ [решено] с использованием понимания списка, предложенного @tianhua liao, все, что ему было нужно:

if hashes in hashes_ssnxxxx.values():
     obfuscate = [k for k,v in hashes_ssnxxxx.items() if hashes == v]
     print(row[16], obfuscate, row[6], row[13], row[35], row[18], row[43])

1 Ответ

0 голосов
/ 03 октября 2018

На самом деле, я не уверен, что ваши проблемы на самом деле.Если бы вы могли дать нам несколько простых примеров hashes_ssnxxxx и hashes, будет хорошо.

Здесь я просто даю несколько угаданных ответов.После того, как вы оцените if hashes in hashes_ssnxxxx.values():, вы захотите напечатать некоторый относительный ключ из hashes_ssnxxxx.keys() вместо всех.

Может быть, вы могли бы использовать некоторое понимание списка , чтобы сделать это просто.Так же, как

[keys for key,vals in hashes_ssnxxxx.items() if hashes == vals]

Вывод этого кода представляет собой список.Если вы хотите сделать его более читабельным, возможно, вам нужно использовать индекс [0] или ','.join() для его печати. ​​

...