如果在 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_ssnxxxx
和 hashes
就好了。
这里我只是给出一些猜测的答案。
在你判断出 if hashes in hashes_ssnxxxx.values():
之后,你想要从 hashes_ssnxxxx.keys()
中打印一些相关的键而不是所有的
也许你可以使用一些列表理解来简单地做到这一点。就像
[keys for key,vals in hashes_ssnxxxx.items() if hashes == vals]
该代码的输出是一个列表。如果你想让它更具可读性,也许你需要使用一些索引[0]
或','.join()
来打印它。
我是 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_ssnxxxx
和 hashes
就好了。
这里我只是给出一些猜测的答案。
在你判断出 if hashes in hashes_ssnxxxx.values():
之后,你想要从 hashes_ssnxxxx.keys()
中打印一些相关的键而不是所有的
也许你可以使用一些列表理解来简单地做到这一点。就像
[keys for key,vals in hashes_ssnxxxx.items() if hashes == vals]
该代码的输出是一个列表。如果你想让它更具可读性,也许你需要使用一些索引[0]
或','.join()
来打印它。