python - 在 Python 中匿名化值列表

标签 python

假设您有一个类似于 CSV 文件的数据集,其中包含一些敏感信息,例如在 12 年级的英语课上谁给谁传了纸条。虽然如果这些数据外泄不是危机,但最好去掉识别信息,这样数据就可以公开、与合作者共享等。数据看起来像这样:

给予者、接受者:

Anna,Joe
Anna,Mark
Mark,Mindy
Mindy,Joe

您将如何处理这个列表,为每个名称分配一个唯一但任意的标识符,然后删除名称并用 Python 中的所述标识符替换它们,这样您最终会得到如下内容:

1,2
1,3
3,4
4,2

最佳答案

您可以使用hash() 生成一个唯一的任意标识符,它将返回始终为特定字符串返回相同的整数:

 with open("data1.txt") as f:
    lis=[x.split(",") for x in f]
    items=[map(lambda y:hash(y.strip()),x) for x in lis]
    for x in items:
        print ",".join(map(str,x))
   ....:         


-1319295970,1155173045
-1319295970,-1963774321
-1963774321,-1499251772
-1499251772,1155173045

或者您也可以使用 iterools.count :

In [80]: c=count(1)

In [81]: with open("data1.txt") as f:
    lis=[map(str.strip,x.split(",")) for x in f]
    dic={}
    for x in set(chain(*lis)):
        dic.setdefault(x.strip(),next(c))
    for x in lis:    
        print ",".join(str(dic[y.strip()]) for y in x)
   ....:         
3,2
3,4
4,1
1,2

或使用 unique_everseen 改进我之前的回答来自 itertools 的 recipe,你可以得到准确的答案:

In [84]: c=count(1)

In [85]: def unique_everseen(iterable, key=None):
        seen = set()
        seen_add = seen.add
        if key is None:
                for element in ifilterfalse(seen.__contains__, iterable):
                        seen_add(element)
                        yield element
                else:
                        for element in iterable:
                                k = key(element)
                                if k not in seen:
                                        seen_add(k)
                                        yield element
   ....:                         

In [86]: with open("data1.txt") as f:
    lis=[map(str.strip,x.split(",")) for x in f]
    dic={}
    for x in unique_everseen(chain(*lis)):
        dic.setdefault(x.strip(),next(c))
    for x in lis:    
        print ",".join(str(dic[y.strip()]) for y in x)
   ....:         
1,2
1,3
3,4
4,2

关于python - 在 Python 中匿名化值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13412248/

相关文章:

python - 如何使用时间字段将指标数据添加到 influxdb?

python - 如何找到特定列中的最大值并返回数据框另一列中的相应值?

python - 如何从 OpenERP 中删除日期异常?

Python py_compile 没有输出?

Python,使用 `python3.6 -m somepackge.run` 运行包

python - Python 中导入的 Spark 问题

python - 如何使用 unittest.mock 在单元测试中模拟任意 ConfigParser 调用

python - 应该如何安装和启用 Jupyter 扩展以使其可重现?

python - 不使用 OR 来匹配的正则表达式 (name ="myName".*house ="myHouse"|house ="myHouse".*name ="myName")

python - 标准Django/python单位转换包