如果在 CSV 列表中找到值,则打印字典键

Printing Dictionary Key if Values were found in CSV List

我是 python 的新手,如果这是对一个简单问题的冗长解释,请原谅我。我需要一些帮助来理解如何使用字典从 csv 列表中查找匹配项,然后在报告类型输出中打印密钥。

目标: 我有一个明文隐私数据列表,例如社会安全号码。我需要比较该明文的哈希值,同时将明文混淆为最后 4 位数字 (XXX-XX-1245)。如果我的明文散列与我在 CSV 查找中已有的散列匹配,我会做一个迷你报告,链接找到的散列可能属于谁的人口统计信息。另外,因为没有什么是容易的,所以在迷你报告中需要打印混淆后的 SPI 值。

如果我刚刚生成的散列与电子表格中第 2 列的散列相匹配,输出应该如下所示:

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

问题:所有散列、混淆和匹配都已完成并存储在列表中并且工作正常。我需要帮助弄清楚如何使用下面的其他列打印字典中的键,而不是每次在 for 循环中打印整个集合。

这在我的 reader 之外有效:

 for i in hashes_ssnxxxx:
        print(i)

但我不知道如何获取该值并将其放入 reader 内的打印语句中。

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])

实际上,我不确定你的问题到底是什么。如果你能给我们一些简单的例子 hashes_ssnxxxxhashes 就好了。

这里我只是给出一些猜测的答案。 在你判断出 if hashes in hashes_ssnxxxx.values(): 之后,你想要从 hashes_ssnxxxx.keys() 中打印一些相关的键而不是所有的

也许你可以使用一些列表理解来简单地做到这一点。就像

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

该代码的输出是一个列表。如果你想让它更具可读性,也许你需要使用一些索引[0]','.join()来打印它。