如何允许用户自定义重排DataFrame列生成的唯一值列表?
更简洁的自定义排序方案
方法1:直接按偏好顺序输入生成列表
如果用户明确知道自己的排序顺序,直接引导输入是最快捷的方式,逻辑简单无冗余:
import pandas as pd # 读取数据并提取唯一水果列表 fruit_info = pd.read_csv('Fruit Information.csv') fruit_list = fruit_info['Fruit Name'].unique().tolist() print("可选水果:", fruit_list) # 让用户按偏好顺序输入,逗号分隔 user_input = input("请按喜好顺序输入水果(用逗号分隔,例:Banana,Apple,Cherry):") sorted_fruit_list = [fruit.strip() for fruit in user_input.split(',')] # 可选:校验输入有效性,过滤不在原列表的内容 validated_list = [f for f in sorted_fruit_list if f in fruit_list] print("最终排序结果:", validated_list)
方法2:基于排名序号自动排序
如果用户习惯用数字排名,用sorted结合匿名函数直接处理,比手动构建字典再排序更简洁:
import pandas as pd fruit_info = pd.read_csv('Fruit Information.csv') fruit_list = fruit_info['Fruit Name'].unique().tolist() print("可选水果:", fruit_list) # 收集每个水果的排名值 rank_map = {} for fruit in fruit_list: rank = int(input(f"请输入{fruit}的排名(数字越小优先级越高):")) rank_map[fruit] = rank # 按排名值排序并生成列表 sorted_fruit_list = [fruit for fruit, rank in sorted(rank_map.items(), key=lambda x: x[1])] print("最终排序结果:", sorted_fruit_list)
方法3:交互式逐步选择排序(适合少量选项)
如果水果数量不多,用循环让用户每次选择当前最喜欢的,逐步构建排序列表,交互更友好:
import pandas as pd fruit_info = pd.read_csv('Fruit Information.csv') fruit_list = fruit_info['Fruit Name'].unique().tolist() remaining_fruits = fruit_list.copy() sorted_fruit_list = [] print("请依次选择你最喜欢的水果:") while remaining_fruits: print(f"剩余可选:{remaining_fruits}") choice = input("输入当前最喜欢的水果:") if choice in remaining_fruits: sorted_fruit_list.append(choice) remaining_fruits.remove(choice) else: print("输入无效,请从剩余列表选择!") print("最终排序结果:", sorted_fruit_list)
这几种方法都比手动字典排序更高效,可根据场景选择:用户明确排序顺序选方法1,需要量化排名选方法2,选项少追求交互体验选方法3。
内容的提问来源于stack exchange,提问作者datagolfer
相关产品推荐
相关产品推荐

