对嵌套列表进行排序:从排序中排除第一项[重复]

2024-01-06

SET

我有一个csv file其中包括我的茶点的当前余额(它是逗号分隔的,但在本例中逗号,为了提高可读性而删除):

NAME         AMOUNT         PRICE
Coca-Cola    8              1.25
Fanta        6              1.29
Dr. Pepper   2              2.20
Sprite       10             1.35
Guarana      6              1.80
Pepsi        4              1.25

我将所有数据读入内存(列表)并使用以下命令进行所有必要的编辑:

import csv
# format list for refreshments
items_list = []

with open("my_refresments.csv", newline='') as fileOpener:
    open_csv = csv.reader(fileOpener)
    for rows in open_csv:
        items_list.append(rows)

列表“items_list”现在打印为:

items_list = [["NAME","AMOUNT","PRICE"],
              ["Coca-Cola","8","1.25"],
              ["Fanta","6","1.29"],
              ["Dr. Pepper","2","2.20"],
              ["Sprite","10","1.35"],
              ["Guarana","6","1.80"],
              ["Pepsi","4","1.25"]]

QUESTION

是什么给了我这种排序:

# Notice that this is sorted, but items_list[0] is at it's place

items_list = [["NAME","AMOUNT","PRICE"],
              ["Coca-Cola","8","1.25"],
              ["Fanta","6","1.29"],
              ["Dr. Pepper","2","2.20"],
              ["Sprite","10","1.35"],
              ["Guarana","6","1.80"],
              ["pepsi","4","1.25"]]

除第一行外的所有内容items_list[0]应该保持未分类,因此原地不动。

对列表进行排序

一般来说a.sort()对于嵌套列表来说,这是一个不错的选择,因为它不会对列表中的所有单个项目进行排序,而是对列表进行比较排序。在这种情况下我不能使用items_list.sort(),因为它还将包含 csv 文件中的标题,我想将其保留在它已经所在的位置:items_list[0]。这是使用时发生的情况items_list.sort():

items_list.sort()
[['Coca-Cola', '8', '1.25'],
 ['Fanta', '6', '1.29'], 
 ['Dr. Pepper', '2', '2.20'], 
 ['Sprite', '10', '1.35'], 
 ['Guarana', '6', '1.80'], 
 ['NAME', 'AMOUNT', 'PRICE'], 
 ['Pepsi', '4', '1.25']]

奇怪的是,如果我把所有的茶点都写成lower case,它会起作用,因为TEXT > text, but 我不想那样做。我想用slice排除第一行(标题),但它似乎没有任何效果(或者也许我做错了):

# This doesn't do anything
items_list[1:].sort()

一种可能的解决方案

我能做的就是

  1. 首先以某种方式将标题复制到另一个列表中temp_list = [items_list[0]]
  2. delete items_list[0]使用del items_list[0]陈述
  3. 使用对列表进行排序items_list.sort(),最后
  4. 将标题插入已排序的列表中index(0) with items_list.insert(0, temp_list)

像这样:

def sort_csv_list_exclude_headers(file_name):

    items_list = []

    with open(file_name, newline='') as fileOpener:
        open_csv = csv.reader(fileOpener)
        for rows in open_csv:
            items_list.append(rows)

    temp_list = [items_list[0]]
    del items_list[0]
    items_list.sort()
    items_list.insert(0, temp_list[0])

    with open(file_name, "w") as fileWriter:
        write_csv = csv.writer(fileWriter, lineterminator='\n')
        write_csv.writerows(items_list)

sort_csv_list_exclude_headers("SODA_BALANCE.csv")

实际上,当使用包含 > 1 000 000 行“茶点”的 csv 时,这通常非常好且简单。

子问题

还有其他(更简单)的方法吗?


干净的内衬将是:

items_list[1:] = sorted(items_list[1:])

Refer: https://stackoverflow.com/a/5827649/937153 https://stackoverflow.com/a/5827649/937153

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对嵌套列表进行排序:从排序中排除第一项[重复] 的相关文章

随机推荐

  • “结束”来自express/connect中间件的请求的正确方法是什么?

    假设我有这样的中间件 var express require express var app express app use function req res next var host example com if req host ho
  • 函数参数类型和 =>

    方法参数的声明到底意味着什么 def myFunc param gt Int param 的含义是什么 gt 在上层定义中 这就是所谓的传名 这意味着您正在传递一个应该返回的函数Int但主要用于实现参数的惰性求值 它有点类似于 def my
  • 下雪时如何输出消息?

    我正在 Windows 7 上使用降雪包进行模拟研究 我喜欢每运行 10 次就打印一条消息到主 R 控制台来监控进度 但它未能这样做 IE 没有打印任何内容 任何帮助都感激不尽 runsim function nsim n mean var
  • 生产中的 MongoDB 和 Mongoid

    我正在部署我的第一个小应用程序MongoDB and Mongoid作为一名司机 在生产中使用 MongoDB 的正确安全方法是什么 我的意思是在我刚刚开始的开发中mongod就是这样 不需要用户名或密码 而且看起来不安全 Mongoid
  • 使用 Azure Devops 发布 Nuget 包

    I m trying to create a Release Pipeline in Azure DevOps that will publish a package to Nuget org The build pipeline work
  • .NET NUnit 测试 - Assembly.GetEntryAssembly() 为 null

    当类使用时Assembly GetEntryAssembly 在单元测试中运行 Assembly GetEntryAssembly is null 有没有一些选项如何定义Assembly GetEntryAssembly 在单元测试期间 实
  • 列出 Fish/bash shell 中可用的所有别名

    有没有办法列出所有别名 例如 ls aliases cd la ls Gla gs git stash etc 另外是否可以为别名添加人类可读的描述 我使用的是 MacOSX In bash 列出所有别名 alias 要添加注释 只需将其放
  • 自 Java 7 update 25 起,Applet.getCodeBase() 对本地 Applet 返回 null

    Since Java 7 更新 25 Applet的方法getCodeBase 似乎回来了NULL对于本地小程序 我还没有找到任何东西Java 7u25发行说明将宣布 解释此更改 但我发现电子邮件讨论 http permalink gman
  • UIAlertView 与 session.dataTaskWithRequest 的问题

    我有这段代码可以验证 IAP 收据 并且我尝试根据此函数返回的状态显示警报 但我不断收到此错误 This application is modifying the autolayout engine from a background th
  • 是否可以在 JavaScript 中链接 setTimeout 函数?

    是否可以连锁setTimout函数以确保它们相继运行 这里列出了三种不同的方法 手动嵌套setTimeout 回调 使用可链接的计时器对象 Wrap setTimeout 在承诺和连锁承诺中 手动嵌套 setTimeout 回调 当然 当第
  • JPA 标准教程 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我一直在尝试寻找 JPA Criteria API 教程 但没有取得太大成功 你知道有哪些适合初学者的
  • Xcode 4 代码感知不起作用

    我正在 Xcode 4 中运行 旧 Xcode 3 项目 代码感知不适用于我自己的类 我尝试过以下操作 清理 重建 删除派生数据 安装4 3文档 Restart 没有任何运气 有时代码感觉有效 但大多数情况下我只是得到 未完成 尝试这个 打
  • 套接字错误:[Errno 111] Ubuntu 上的连接被拒绝

    Traceback most recent call last s smtplib SMTP localhost File usr lib python2 7 smtplib py line 251 in init code msg sel
  • Fortify 源分析器和 Apache Lenya

    我正在尝试将 Fortify 源代码分析器用于我学校的一个研究项目 以测试开源 Java Web 应用程序的安全性 我目前正在研究 Apache Lenya 我正在使用最新的稳定版本 Lenya v2 0 2 根目录下有一个文件名为buil
  • 使用 querySelectorAll 时,Typescript 对象可能为“null”.ts(2531)

    class Test state elements container null constructor container HTMLElement null options permet de prendre les options du
  • 在 C# 中将文本添加到文件的开头和结尾

    我有一个进程可以获取一系列 xml 文件 我将 xml 放在引号中的原因是文件中的文本没有根元素 这会导致 xml 无效 在我的处理中 我想纠正这个问题并打开每个文件 在每个文件的开头和结尾添加一个根节点 然后将其关闭 这是我的想法 但这涉
  • 使用私钥通过 VSCode 连接到主机

    我想连接到远程服务器 我知道用户名和主机名 而且我也有private key pem文件 如何使用 VSCode 连接到该虚拟机 我在互联网上的解决方案中遇到了这个错误 这是合理的 因为我还没有导入这个private key pem文件在任
  • 对于没有字段的构造函数,reallyUnsafePtrEquality#

    据我了解 没有字段的类型的构造函数是 静态分配 的 并且 GHC在所有用途之间共享这些 https stackoverflow com a 3256825 176841 并且GC不会移动这些 https ghc haskell org tr
  • MD5 是否仍然足以唯一标识文件?

    考虑到 MD5 算法的破坏和安全问题等 MD5 散列文件是否仍然被认为是唯一识别该文件的足够好的方法 安全性不是我在这里最关心的问题 但唯一地标识每个文件才是 有什么想法吗 是的 MD5从安全角度来说已经被彻底攻破 但意外碰撞的概率仍然微乎
  • 对嵌套列表进行排序:从排序中排除第一项[重复]

    这个问题在这里已经有答案了 SET 我有一个csv file其中包括我的茶点的当前余额 它是逗号分隔的 但在本例中逗号 为了提高可读性而删除 NAME AMOUNT PRICE Coca Cola 8 1 25 Fanta 6 1 29 D