【问题标题】:How do I sort a list in ascending order using a specific column, without using a build in function? (Python)如何在不使用内置函数的情况下使用特定列按升序对列表进行排序? (Python)
【发布时间】:2019-11-13 12:26:49
【问题描述】:

我已将一个 CSV 文件导入到 Python 中的列表中,其中包含具有以下列的动物数据:

Sanctuary Identification,Type,Breed,Vaccinated,Neutered

P23533,Cat,Persian,Yes,Yes

P43533,Dog,Poodle,Yes,No

P18754,Dog...

数据以下列格式显示:

[[P23533,Cat,Persian,Yes,Yes],[P43533,Dog,Poodle,Yes,No],[P18754,Dog...]]

我想按他们的圣所身份升序对列表进行排序,即:

P1111, Cat, ..
P2222 Dog, ..
P3333.. etc

我不能使用任何内置库,谁能建议我如何解决这个问题?

【问题讨论】:

  • 只要在网上搜索一个排序算法,实现它并应用它。这就是我会做的。
  • sorted(data, key=lambda x: x[0])import re;sorted(y, key=lambda x: int(re.search(r'\d+', x[0]).group()))
  • sortsorted 函数不需要导入。他们有一个额外的 key 参数,您可以使用它来确定排序依据(在您的情况下,它应该类似于 key: lambda row: row[column_index]
  • 逐个获取List索引,对于每个索引,获取第一个元素,然后与第一个元素的下一个索引like Bubble Sort Implementation进行比较。
  • “我无法使用任何内置库” 也称为“这是作业”

标签: python list csv sorting


【解决方案1】:

您可以使用sorted 内置函数对嵌套列表进行排序,然后传入第一列作为要排序的键。下面是例子。

In [1]: my_list = [["P23533","Cat","Persian","Yes","Yes"],["P43533","Dog","Poodle","Yes","No"], ["P1111","Asd","Test","
   ...: Yes","Yes"]]

In [2]: sorted(my_list, key=lambda x: x[0])
Out[2]:
[['P1111', 'Asd', 'Test', 'Yes', 'Yes'],
 ['P23533', 'Cat', 'Persian', 'Yes', 'Yes'],
 ['P43533', 'Dog', 'Poodle', 'Yes', 'No']]

或者,您可以使用pandas.read_csv 将您的csv 加载到DataFrame 对象中,然后使用sort_values 函数:

In [10]: df.sort_values(["SanctuaryID"]).reset_index(drop=True)
Out[10]:
  SanctuaryID Animal     Type Col4 Col5
0       P1111    Asd     Test  Yes  Yes
1      P23533    Cat  Persian  Yes  Yes
2      P43533    Dog   Poodle  Yes   No

【讨论】:

  • 感谢您的建议,我已经应用了您建议的代码,但在打印时我仍然得到一个无序列表。你能看看可能有什么问题吗? ``` with open("PETS.csv", "r") as pets_file: pets_file_reader = csv.reader(pets_file) for row in pets_file_reader: pets.append(row) sorted(pets, key=lambda x: x[0 ]) 用于宠物中的行: print(row[0]) ```
  • sorted 只是一个返回新对象的函数(不是就地排序),所以你需要覆盖你的pets 变量(即pets = sorted(pets, key=lambda x: x[0]),或者你可以创建一个新变量
  • @KurtisDunphy 你能接受这个作为答案,这样它对阅读这篇文章的其他人有用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 2014-06-25
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多