我正在尝试从文件中读取行并从文件中的分割行数据创建OrderedDict
,但似乎我只能将最后行添加到输出到我的字典。
from collections import OrderedDict city_file = open('US.txt', 'r') cities = OrderedDict() states = OrderedDict() for row in city_file: city_data = row.split('\t') print(city_data) # prints each list row of the file just fine state = city_data[3].strip() states[state] = { 'name': state, 'code': city_data[4].strip(), } cities[city_data[5]] = { 'name': city_data[5].strip(), 'state': list(states.keys()).index(state) + 1, 'zip_code': city_data[1].strip(), 'latitude': city_data[9].strip(), 'longitude': city_data[10].strip() }
我无法从文本文件中获取每个独特州或城市的字典及其对应的列数据。
当我将city_data
列表分配给字典states
时,它似乎丢失了。那是为什么?
文件中的每一行都如下所示:
US 99788 Chalkyitsik Alaska AK Yukon-Koyukuk (CA) 290 65.2264 -151.0251 US 36003 Autaugaville Alabama AL Autauga 001 32.4625 -86.7149
编辑:澄清在我的最终结果中,我正在尝试获取状态字典,其中每个唯一的州名称作为键(因此状态字典应该有50个状态),城市字典应该是为每个键设置每个城市名称。但是当我执行len(城市)时,长度为1,只有最后一个存储在dict中。
答案 0 :(得分:0)
来自您想要OrderedDict([('Wyoming', {'name': 'Wyoming', 'code': 'WY'})])
的评论
from collections import OrderedDict
city_file = open('US.txt', 'r')
states = OrderedDict()
cities = OrderedDict()
for row in city_file:
data = [e.strip() for e in row.split(' ')]
states[data[3]] = {
'name': data[3],
'code': data[4]
}
cities[data[5]] = {
'name': data[5],
'state': data[3],
'zip_code': data[1],
'latitude': data[8],
'longitude': data[9]
}
输出:
>>> states
OrderedDict([('AK', {'code': 'Yukon-Koyukuk (CA)', 'name': 'AK'}), ('', {'code': 'Alabama AL', 'name': ''})])
>>> cities
OrderedDict([('290', {'latitude': '', 'state': 'AK', 'name': '290', 'longitude': '65.2264 -151.0251', 'zip_code': '99788'}), ('Autauga 001', {'latitude': '', 'state': '', 'name': 'Autauga 001', 'longitude': '32.4625 -86.7149', 'zip_code': '36003'})])