Ваши code
и demo data
имеют 2 проблемы:
- Ваши фамилии имеют различную заглавную букву - следовательно, они отличаются при использовании в качестве ключа.
- Ваши имена имеют префикс фамилий - вы не отделяете часть фамилии от них.
Вы можете указать обе вещи в коде.Я предполагаю, что ваше «фамилия» всегда является последней строкой первого столбца после последней точки в нем, все вещи перед фамилией.
Создать файл демонстрационных данных с дубликатомзапись (Li vs Li vs li)
with open("faculty.csv","w") as f:
f.write("""name,degree,title
S.li,phd,Associate Professor of Biostats
d.Chiou,MD, Professor of ABC
F.Li,MPH, Professor of DCD
K.Li,MPH Professor of XYZ
""")
Обработка CSV-файла в dict
import csv
# process data
mydict = {}
with open('faculty.csv') as r:
reader = csv.reader(r)
# skip header row
next(reader, None)
# process data rows
for rows in reader:
k = rows[0]
v = rows[1:]
# Name has . in it:
if '.' in k:
# all before last . is surname, after last . is lastName
# we add surnames to the data, use only lastName as key
lastName = k.split('.')[-1]
surName = k[:-len(lastName)] # strip key from name part
v.append(surName) # add surname-parts to data
else:
lastName = k # no surnames
# create/get key in/from dict if needed, prepopulate value with empty list
key = mydict.setdefault(lastName,[])
# append data
key.append(v)
print (mydict)
Вывод (отформатированный):
{'Chiou': [['MD', ' Professor of ABC', 'd.']],
'Li': [['MPH', ' Professor of DCD', 'F.'], ['MPH Professor of XYZ', 'K.']],
'li': [['phd', 'Associate Professor of Biostats', 'S.']]}
Если ваши данные неверны, вы можете подумать об исправлении имен с помощью .capitalize()
или .title()
на клавише:
name = "one naMe"
print(name[0].upper()+name[1:])
print(name.capitalize())
print(name.title())
Вывод:
One naMe # name[0].upper()+name[1:]
One name # .capitalize()
One Name # .title()