我正在将csv文件转换为字典,两个csv文件相似但具有不同的值。一个csv文件有{name, state, website}另一个有{name, state, car}。这些文件中有一些相同的人,所以我想循环键,如果他们有相同的名字,添加缺失的键,例如,如果两个文件都有一个叫约翰·威廉姆斯的人,它会找到这个名字,并创建一个新的字典,说{name: 'John Williams', state: 'FL", website "https://helpmeplease.com", car: "Kia"}。如果有一个新的人,那么我希望它创建一个新的行,并将其添加到字典中。
我已经将csv文件转换为字典,我正在比较当前的关键'名称',我从这里卡住了,虽然不知道从这里去哪里。
import csv
filename1 ="example.csv"
filename2 = "example2.csv"
blue = {}
with open(filename1, 'r', newline='') as f:
for line in csv.DictReader(f):
blue[line['name']] = line
with open(filename2, 'r', newline='') as h:
for line in csv.DictReader(h):
if line['name'] in blue.keys():
#This is where I'm stuck
else:
blue[line['name']] = line
您可以使用dict.update
将一个字典的内容合并到另一个字典中。我也会使用defaultdict
来管理字典的字典,因为这样你就可以直接合并数据,而不必检查是否需要先创建字典。
import csv
from collections import defaultdict
filenames = ["example.csv", "example2.csv"]
fire = defaultdict(dict) # type: Dict[str, Dict[str, str]]
for filename in filenames:
with open(filename, 'r', newline='') as f:
for row in csv.DictReader(f):
fire[row['name']].update(row)
请注意,如果您有像filename1
和filename2
这样的变量,并且复制+粘贴代码对它们都做了大致相同的事情,那么通常应该使用列表和for
循环来代替!:)