如何读取文件并将其排序为dict?

时间:2017-05-31 04:37:06

标签: python python-3.x dictionary

我有一个这样的文件:

 1909 Ford Model T
 1958 Ford Edsel
 1970 AMC Gremlin
 1978 AMC Pacer

我想把这个文件读成dict并按下面的方式排序:

 Ford : ['1909', '1958']
 AMC : ['1970', '1978']

我试过了:

def get_worst_manufacturer_dict(filename):
    car_dict = {}
    with open(filename) as f:
     for key in f:
         if key == key:
    return car_dict

def test_get_worst_manufacturer_dict():
    car_dict = get_worst_manufacturer_dict('cars.txt')
    for key in sorted(car_dict):
      print (key, ':', car_dict[key])


test_get_worst_manufacturer_dict()

我不知道如何修复我的第一个def函数,我实际上没有线索。

2 个答案:

答案 0 :(得分:3)

您可以使用str.split()进行Py3扩展解包。这假设所有manufacturer只是一个单词:

from collections import defaultdict

def get_worst_manufacturer_dict(filename):   
    car_dict = defaultdict(list)
    with open(filename) as f:
        for line in f:
            year, manufacturer, *model = line.split()
            car_dict[manufacturer].append(year)
    return car_dict

这使用defaultdict(list)来保留年份,如有必要,您可以转换回dict return dict(car_dict)

答案 1 :(得分:0)

你可以试试熊猫:

import pandas as pd
df = pd.read_csv('your.csv',sep=" ", header=None)
df

df

    0       1       2       3
0   1909    Ford    Model   T
1   1958    Ford    Edsel   NaN
2   1970    AMC     Gremlin NaN
3   1978    AMC     Pacer   NaN

然后使用:

df.groupby(1)[0].apply(list).to_dict()

它会给你:

{'AMC': [1970, 1978], 'Ford': [1909, 1958]}