Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建将重复值映射到多个键并清除数据的字典?_Python_Csv_Dictionary_Data Cleaning - Fatal编程技术网

Python 如何创建将重复值映射到多个键并清除数据的字典?

Python 如何创建将重复值映射到多个键并清除数据的字典?,python,csv,dictionary,data-cleaning,Python,Csv,Dictionary,Data Cleaning,我是编程新手,正在尝试编写代码使简单的任务更容易。所以现在我遇到了一个csv文件的问题,它列出了数据库字段和该字段关联的表。我想要的最终状态是一个字典,它成功地映射出字段出现在其中的每个表。例如:{firstname;[cust_table,supplier_table,dealer_table]}在某些项目中有很多不必要的空白。我经常遇到的一个问题是,一些数据库字段被赋予了额外的空白,而另一些字段则没有,例如:“CUSTID”、“CUSTID”。在保持db字段和表之间的关系的同时,我可以做些什

我是编程新手,正在尝试编写代码使简单的任务更容易。所以现在我遇到了一个csv文件的问题,它列出了数据库字段和该字段关联的表。我想要的最终状态是一个字典,它成功地映射出字段出现在其中的每个表。例如:{firstname;[cust_table,supplier_table,dealer_table]}在某些项目中有很多不必要的空白。我经常遇到的一个问题是,一些数据库字段被赋予了额外的空白,而另一些字段则没有,例如:“CUSTID”、“CUSTID”。在保持db字段和表之间的关系的同时,我可以做些什么来消除这个问题

我已经尝试在csv模块中使用reader对象,并且能够创建一个我需要的所有字段的干净列表,并删除了所有重复项。我希望能够循环浏览此列表,并将其用作我将创建的新词典的过滤器;将表的值添加到每个唯一的db字段(键)。但现在我什么也不退(空字典)

以下是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(第[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)
不会起作用,因为文件已经在第一个code
reader=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请参见我文章底部的“编辑”)