首页 > 解决方案 > 如果在 CSV 列表中找到值,则打印字典键

问题描述

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

标签: pythoncsvdictionarymd5apache-tika

解决方案


实际上,我不确定您的问题到底是什么。如果你能给我们一些简单的例子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()打印它。


推荐阅读