【问题标题】:Python: Using DictReader, sort in specific columnnPython:使用 DictReader,在特定列中排序
【发布时间】:2019-03-13 06:40:43
【问题描述】:

我正在尝试对我的 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) 的函数(例如 Steve Rogers、Jon Snow、Daenerys Targaryen),它将显示字典的排序列表。

输出应该是:

{'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'}

现在如何根据我的程序制作一个以排序方式显示的函数?

【问题讨论】:

  • 是笔误,还是在返回之前忘记将文件内容存储在university_data?恕我直言 university_data.append(col) 在循环中丢失...
  • @SergeBallesta 我有 university_data 作为 load_data 的回报。我将 university_data.append(col) 更新到我的代码中,但出现错误。

标签: python python-3.x dictionary set


【解决方案1】:

你还有一些小问题。

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

接下来,university_data 是一个字典列表(如果是 collections.OrderedDict),键是 NameID、StudentName、University、Phone 和 State。

所以你需要:

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'])
        ...

其他元素也一样...

【讨论】:

  • 每当它执行“ print(university['University']) KeyError: 'University'”时我都会得到一个 KeyError
  • @Smokingpenguin:你添加了skipinitialspace吗?如果你这样做了,请将 csv 文件的第一行显示为纯文本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 1970-01-01
  • 2021-08-27
  • 2011-12-14
相关资源
最近更新 更多