Python 使用if和循环技术将清理后的数据附加到字典中
我有一个数据集要清理和组织。这是数据集的链接 所以我想做的是用{State:Town}格式清理字典中的数据集,例如{'Alabama':'Auburn',Alabama:'Florence'…'Wyoming':'Laramie') 这是我的密码:Python 使用if和循环技术将清理后的数据附加到字典中,python,dictionary,for-loop,if-statement,Python,Dictionary,For Loop,If Statement,我有一个数据集要清理和组织。这是数据集的链接 所以我想做的是用{State:Town}格式清理字典中的数据集,例如{'Alabama':'Auburn',Alabama:'Florence'…'Wyoming':'Laramie') 这是我的密码: import re univ_towns = open('university_towns.txt',encoding='utf-8').readlines() state_list = [] d={} for name in univ_to
import re
univ_towns = open('university_towns.txt',encoding='utf-8').readlines()
state_list = []
d={}
for name in univ_towns:
if "[ed" in name:
statename = re.sub('\[edit]\n$', '', name)
state_list.append(statename)
len_state = len(state_list)
elif "(" in name:
sep = ' ('
townname = name.split(sep, 1)[0]
if "," in townname:
sep = ','
townname = townname.split(sep, 1)[0]
d[state_list[len_state-1]] = townname
d
然而,我的输出代码只给出了字典中最后一个附加的结果。我确信循环逻辑有问题,但我无法真正找出问题所在。以下是我的代码输出:
{'Alabama': 'Tuskegee',
'Alaska': 'Fairbanks',
'Arizona': 'Tucson',
'Arkansas': 'Searcy',
'California': 'Whittier',
'Colorado': 'Pueblo',
'Connecticut': 'Willimantic',
'Delaware': 'Newark',
'Florida': 'Tampa',
'Georgia': 'Young Harris',
'Hawaii': 'Manoa',
'Idaho': 'Rexburg',
'Illinois': 'Peoria',
'Indiana': 'West Lafayette',
'Iowa': 'Waverly',
'Kansas': 'Pittsburg',
'Kentucky': 'Wilmore',
'Louisiana': 'Thibodaux',
'Maine': 'Waterville',
'Maryland': 'Westminster',
'Massachusetts': 'Framingham',
'Michigan': 'Ypsilanti',
'Minnesota': 'Winona',
'Mississippi': 'Starkville',
'Missouri': 'Warrensburg',
'Montana': 'Missoula',
'Nebraska': 'Wayne',
'Nevada': 'Reno',
'New Hampshire': 'Rindge',
'New Jersey': 'West Long Branch',
'New Mexico': 'Silver City',
'New York': 'West Point',
'North Carolina': 'Winston-Salem',
'North Dakota': 'Grand Forks',
'Ohio': 'Wilberforce',
'Oklahoma': 'Weatherford',
'Oregon': 'Newberg',
'Pennsylvania': 'Williamsport',
'Rhode Island': 'Providence',
'South Carolina': 'Spartanburg',
'South Dakota': 'Vermillion',
'Tennessee': 'Sewanee',
'Texas': 'Waco',
'Utah': 'Ephraim',
'Vermont': 'Northfield',
'Virginia': 'Chesapeake',
'Washington': 'University District',
'West Virginia': 'West Liberty',
'Wisconsin': 'Whitewater',
'Wyoming': 'Laramie'}
尝试使用defaultdict:
from collections import defaultdict
d = defaultdict(list)
for name in univ_towns:
if "[ed" in name:
statename = re.sub('\[edit]\n$', '', name)
state_list.append(statename)
len_state = len(state_list)
elif "(" in name:
sep = ' ('
townname = name.split(sep, 1)[0]
if "," in townname:
sep = ','
townname = townname.split(sep, 1)[0]
d[state_list[len_state-1]].append(townname)
正如你所看到的,唯一的主要区别是最后你使用了
append
而不是=
。你以前的方式只会返回一个城市,而不是所有城市,这似乎是你想要的,除非我有误解。你可以接受答案,因为你所问的问题得到了正确的回答。append旁边,我认为您所做的另一件关键的事情是使用'defaultdict(list)'而不是'{}',因为append对{}不起作用。只是好奇,您知道为什么吗?对,“唯一的主要区别”当然不太准确。defaultdict(list)是它自己的对象类型,类似于一个字典,但本身并不是一个。本质上,创建它的方式不同于常规字典,Python将它识别为不同类型的对象,可以添加不同的项,但结果对象的行为与常规字典一样。它非常适合类似的情况当你需要创建一个列表字典时,你的。