Python读取文件并将拆分列表数据分配给字典

时间:2015-04-16 21:15:32

标签: python django python-3.x

我正在尝试从文件中读取行并从文件中的分割行数据创建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中。

1 个答案:

答案 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'})])