鱼C论坛

 找回密码
 立即注册
查看: 770|回复: 3

[已解决]python排序(类似excel中的排序,根据主关键字升序或降序)

[复制链接]
发表于 2024-12-17 19:43:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请编写一个房屋信息排序输出程序,对于输入的任意关键字和排序方向,能正确排序输出。
样例数据如下:
[{'标题':'东园小区2室1厅', '面积':52.89, '单价':44054, '总价':2330000},
{'标题':'梦琴湾3室2厅', '面积':131.39, '单价':22833, '总价':3000000},
{'标题':'金盛曼城2室2厅', '面积':88.82, '单价':36591, '总价':3250000}]
样例输入:
面积  降序
样例输出:
[{'标题': '梦琴湾3室2厅', '面积': 131.39, '单价': 22833, '总价': 3000000},
{'标题': '金盛曼城2室2厅', '面积': 88.82, '单价': 36591, '总价': 3250000},
{'标题': '东园小区2室1厅', '面积': 52.89, '单价': 44054, '总价': 2330000}]
最佳答案
2024-12-17 19:43:50
  1. # 样例数据
  2. houses = [
  3.     {"名称": "房屋A", "面积": 100, "价格": 500},
  4.     {"名称": "房屋B", "面积": 200, "价格": 1500},
  5.     {"名称": "房屋C", "面积": 150, "价格": 1000}
  6. ]

  7. # 获取用户输入
  8. key = input("请输入排序关键字(如:面积、价格):")
  9. direction = input("请输入排序方向(升序或降序):")

  10. # 根据用户输入排序
  11. reverse = True if direction == "降序" else False
  12. sorted_houses = sorted(houses, key=lambda x: x[key], reverse=reverse)

  13. # 输出排序结果
  14. print("排序结果:")
  15. for house in sorted_houses:
  16.     print(house)
复制代码


您可以将样例数据替换为其他房屋信息,只需确保每个字典中的键与用户输入匹配即可。这段代码会根据用户输入的关键字和方向对房屋信息进行排序并输出结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-12-17 19:43:50 | 显示全部楼层    本楼为最佳答案   
  1. # 样例数据
  2. houses = [
  3.     {"名称": "房屋A", "面积": 100, "价格": 500},
  4.     {"名称": "房屋B", "面积": 200, "价格": 1500},
  5.     {"名称": "房屋C", "面积": 150, "价格": 1000}
  6. ]

  7. # 获取用户输入
  8. key = input("请输入排序关键字(如:面积、价格):")
  9. direction = input("请输入排序方向(升序或降序):")

  10. # 根据用户输入排序
  11. reverse = True if direction == "降序" else False
  12. sorted_houses = sorted(houses, key=lambda x: x[key], reverse=reverse)

  13. # 输出排序结果
  14. print("排序结果:")
  15. for house in sorted_houses:
  16.     print(house)
复制代码


您可以将样例数据替换为其他房屋信息,只需确保每个字典中的键与用户输入匹配即可。这段代码会根据用户输入的关键字和方向对房屋信息进行排序并输出结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
FishC 发表于 2024-12-17 19:43
您可以将样例数据替换为其他房屋信息,只需确保每个字典中的键与用户输入匹配即可。这段代码会根据用户 ...

请问能不能用VB宏实现多个排序条件组合、关键字标注红色?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 6 天前 | 显示全部楼层
凊风 发表于 2025-09-24 10:16
FishC 发表于 2024-12-17 19:43
您可以将样例数据替 ...


在 Excel VBA 中,您可以使用宏实现多条件排序和关键字标注红色。以下是一个示例代码,它允许您指定多个排序关键字(每个关键字可独立设置升序或降序),并在排序后将关键字所在的列标注为红色字体。


  1. Sub MultiSortAndHighlight()
  2.     Dim ws As Worksheet
  3.     Set ws = ActiveSheet ' 假设操作当前活动工作表
  4.     Dim rng As Range
  5.     Set rng = ws.Range("A1").CurrentRegion ' 假设数据区域从A1开始连续
  6.    
  7.     ' 清除之前的排序字段
  8.     ws.Sort.SortFields.Clear
  9.    
  10.     ' 示例:设置多个排序条件
  11.     ' 第一关键字:列A(升序)
  12.     ws.Sort.SortFields.Add Key:=rng.Columns(1), Order:=xlAscending
  13.     ' 第二关键字:列B(降序)
  14.     ws.Sort.SortFields.Add Key:=rng.Columns(2), Order:=xlDescending
  15.     ' 可根据需要添加更多关键字
  16.    
  17.     ' 应用排序
  18.     With ws.Sort
  19.         .SetRange rng
  20.         .Header = xlYes ' 假设第一行是标题
  21.         .Apply
  22.     End With
  23.    
  24.     ' 标注关键字列为红色(例如,将排序关键字所在的列A和列B的字体设为红色)
  25.     rng.Columns(1).Font.Color = vbRed ' 列A标红
  26.     rng.Columns(2).Font.Color = vbRed ' 列B标红
  27.     ' 注意:如果数据区域有标题行,上述代码会将标题也标红;若只需标红数据部分,可调整范围,例如 rng.Columns(1).Offset(1, 0).Resize(rng.Rows.Count - 1, 1)
  28. End Sub
复制代码


说明:
- 此宏首先对数据区域进行多条件排序(示例中按列A升序、列B降序)。
- 排序后,将关键字所在的列(如列A和列B)的字体颜色设置为红色。
- 您可以根据实际需求修改排序关键字和标红列(通过调整 Key:=rng.Columns(1) 中的列索引和 Font.Color 部分)。

注意事项:
- 请确保数据区域包含标题行,且代码中的 Header = xlYes 与之匹配。
- 如果数据区域不连续,可能需要手动设置 rng 范围。
- 运行宏前,建议备份数据,以免排序或格式更改导致意外结果。

如需更动态的输入(例如通过用户表单选择关键字和排序方向),可以进一步扩展宏,但上述代码提供了基础框架。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-30 07:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表