Python:使用DictReader,在特定的columnn中排序

时间:2019-03-13 06:40:44

标签: python python-3.x dictionary set

我正在尝试对csv文件中的特定列或键进行排序。

文本文件如下:

NameID, StudentName, University, Phone, State
SROGE, Steve Rogers,  UofI, 324324423, New York
JSNOW, Jon Snow, UofWinterfell, 324234423, Westeros
DTARG, Daenerys Targaryen, Dragonstone, 345345, NULL

现在我有一个函数,它使用DictReader读取csv文件,然后将其打印。另一个函数要求用户输入,它应该显示一个排序的列:

def load_data(file_name):
university_data=[]
with open("file.csv", mode='r') as csv_file:
    csv_reader = csv.DictReader(csv_file)
    for col in csv_reader:
      university_data.append(dict(col))
      print(university_data)
return university_data


def main():
    filename='file.csv'
    university_data = load_data(filename)
    print('[1] University\n[2] Student Name\n[3] Exit\n[4] Search')
    while True:

        choice=input('Enter choice 1/2/3? ')
        if choice=='1':
            for university in university_data:
                print(university[2])
        elif choice=='2':
            for university in university_data:
                print(university[1])
        elif choice =='3':
            print('Thank You')
            break
        else:
            print('Invalid selection')
main()

我需要帮助的是制作一个用户选择StudentName(2)的函数(例如史蒂夫·罗杰斯,乔恩·斯诺,丹妮莉丝·坦格利安),它将显示字典的排序列表。

输出应为:

{'NameID': 'DTARG', ' StudentName': ' Daenerys Targaryen',' University': ' Dragonstone', ' Phone': ' 345345', ' State': ' NULL'}
{'NameID': 'JSNOW', ' StudentName': ' Jon Snow', ' University': ' UofWinterfell', ' Phone': ' 324234423', ' State': 'Westeros'}
{'NameID': 'SROGE', ' StudentName': ' Steve Rogers', ' University': '  UofI', ' Phone': ' 324324423', ' State': ' NewYork'}

现在如何根据我的程序使功能以排序方式显示?

1 个答案:

答案 0 :(得分:0)

您仍然有一些小问题。

首先,csv文件似乎在分隔符后包含空格。解析时需要选项skipinitialspace=True

接下来,university_data是字典的列表(如果为collections.OrderedDict),键是NameID,StudentName,大学,电话和州。

所以您需要:

def load_data(file_name):
    ...
        csv_reader = csv.DictReader(csv_file, skipinitialspace=True)
...
def main():
    ...
        if choice=='1':
            for university in university_data:
                print(university['University'])
        ...

与其他元素相同...