Python 如何创建将重复值映射到多个键并清除数据的字典?
我是编程新手,正在尝试编写代码使简单的任务更容易。所以现在我遇到了一个csv文件的问题,它列出了数据库字段和该字段关联的表。我想要的最终状态是一个字典,它成功地映射出字段出现在其中的每个表。例如:{firstname;[cust_table,supplier_table,dealer_table]}在某些项目中有很多不必要的空白。我经常遇到的一个问题是,一些数据库字段被赋予了额外的空白,而另一些字段则没有,例如:“CUSTID”、“CUSTID”。在保持db字段和表之间的关系的同时,我可以做些什么来消除这个问题 我已经尝试在csv模块中使用reader对象,并且能够创建一个我需要的所有字段的干净列表,并删除了所有重复项。我希望能够循环浏览此列表,并将其用作我将创建的新词典的过滤器;将表的值添加到每个唯一的db字段(键)。但现在我什么也不退(空字典) 以下是csv文件中一些行的示例:Python 如何创建将重复值映射到多个键并清除数据的字典?,python,csv,dictionary,data-cleaning,Python,Csv,Dictionary,Data Cleaning,我是编程新手,正在尝试编写代码使简单的任务更容易。所以现在我遇到了一个csv文件的问题,它列出了数据库字段和该字段关联的表。我想要的最终状态是一个字典,它成功地映射出字段出现在其中的每个表。例如:{firstname;[cust_table,supplier_table,dealer_table]}在某些项目中有很多不必要的空白。我经常遇到的一个问题是,一些数据库字段被赋予了额外的空白,而另一些字段则没有,例如:“CUSTID”、“CUSTID”。在保持db字段和表之间的关系的同时,我可以做些什
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(第[1],]).append(第[0]行)
是以下内容的缩写:
if row[1] not in d:
d[row[1]] = []
d[row[1]].append(row[0])
我不确定这是你需要的
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(第[1],]).append(第[0]行)
是以下内容的缩写:
if row[1] not in d:
d[row[1]] = []
d[row[1]].append(row[0])
csv文件中不存在额外的行空格仅供参考,
list(dict.fromkeys(x))==list(set(x))
。我认为reader2=csv.reader(f)
不会起作用,因为文件已经在第一个codereader=csv.reader(f)
那么我需要为reader2创建一个文件副本吗?我确信有一种比这更有效的方法……在你做reader2
之前,你需要做f.seek(0)
额外的行空间不存在于csv文件中仅供参考,list(dict.fromkeys(x))==list(set(x))
。我不认为reader2=csv.reader(f)
将起作用,因为文件已经在第一个代码中读取了reader=csv。reader(f)
那么我需要为reader2创建文件的dup吗?我相信有一种比这更有效的方法…在你做reader2
之前,你需要做f.seek(0)
@noveler\u programmer9623很高兴它有用!你能给我解释一下d.setdefault(第[1]行),]).append(第[0]行)是如何工作的吗?@novel_programmer9623如果还没有输入键,default会附加一个默认值,(这里是该键的列表引用,[]
(然后附加到新的列表引用第[0]行)
@newoil\u programmer9623在“我的编辑”页面底部查看我的编辑post@novice_programmer9623很高兴它很有用!你能给我解释一下d.setdefault(第[1],]).append(第[0]行)是如何工作的吗?@nearrow_programmer9623如果还没有输入键,default会附加一个默认值(这里是该键的列表引用,[]
)(然后附加到新的列表参考行[0]
@noveler\u programmer9623请参见我文章底部的“编辑”)