python - 如何创建将重复值映射到多个键和清理数据的字典?
问题描述
我是编程新手,正在尝试编写代码以使简单的任务更容易。所以现在我在使用 csv 文件时遇到了问题,该文件列出了数据库字段和与该字段关联的表。我想要的最终状态是一个字典,它成功地映射出每个出现字段的表。例如:{firstname;[cust_table,supplier_table,dealer_table]} 在某些项目中有很多不必要的空白. 我一直遇到的一个问题是,一些数据库字段被赋予了额外的空白,而另一些则没有,例如:'CUSTID'、'CUSTID'。我能做些什么来摆脱这个,同时仍然保持 db 字段和表之间的关系?
我尝试在 csv 模块中使用 reader 对象,并且能够创建我需要的所有字段的干净列表并删除所有重复项。我希望能够遍历此列表并将其用作我将创建的新字典的过滤器;将表的值添加到每个唯一的数据库字段(键)。但现在我没有返回任何东西(空字典)
import csv
f=open("Data Mapping Information.csv","r")
reader=csv.reader(f)
field_list=[]
for row in reader:
field_list.append(row[1])
mylist=list(dict.fromkeys(field_list))
cleanList=[]
for item in mylist:
clean_item=item.strip()
cleanList.append(clean_item)
reader2=csv.reader(f)
mapping={}
for row in reader2:
if row[1] in mylist:
mapping[row[1]]=row[0]
以下是 csv 文件中一些行的示例:
ADS,CUSTID
ADS,ROLEID
ADS_PARTY,CUSTID
CUST_TABLE,CUSTID
CUST_TABLE,FULLNAME
DEALER_TABLE,FULLNAME
SUPPLIER_TABLE,FULLNAME
SUPPLIER_TABLE,ROLEID
解决方案
我不确定这是你需要的。
import csv
from pprint import pprint
f=open("f0.csv","r")
reader=csv.reader(f)
d = {}
for row in reader:
row[0] = row[0].strip() # remove leading, trailing whitespace
row[1] = row[1].strip()
d.setdefault(row[1], []).append(row[0])
f.close()
pprint(d)
印刷:
{'CUSTID': ['ADS', 'ADS_PARTY', 'CUST_TABLE'],
'FULLNAME': ['CUST_TABLE', 'DEALER_TABLE', 'SUPPLIER_TABLE'],
'ROLEID': ['ADS', 'SUPPLIER_TABLE']}
编辑:d.setdefault(row[1], []).append(row[0])
是简写:
if row[1] not in d:
d[row[1]] = []
d[row[1]].append(row[0])
推荐阅读
- django - Django 对来自两个模型的表单字段进行排序
- javascript - 从 4d 矩阵 JS 中提取 2d 矩阵
- typescript - 如何在 Typescript 中使用一个已知键和一个未知键键入对象?
- opencv - 为什么我遇到一个问题,告诉我将值设置为浮动,而当我得到时,我需要将其设置为整数?
- assembly - 如何使用 MIPS 程序集将循环函数更改为递归函数?
- sql - 查找可以为 0 或可以大于 0 但必须至少有一条记录等于 0 的值
- apache-spark - PySpark 按索引将 2 列值合并到新列表中
- google-bigquery - 是否可以在 bigQuery 表中插入具有不同字段的行?
- javascript - 滚动时视差效果不适用于背景颜色
- session - mod_auth_openidc - OIDCSessionInactivityTimeout 不起作用 - 401