You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对字典df按key排序并对值内列表按首元素升序排列?

解决字典排序与文件写入的问题

要满足你的两个排序需求(按字典key升序遍历,同时对每个key对应的列表按子列表首元素升序排列),可以直接修改循环逻辑,在遍历和判断之间完成排序操作:

# 按key升序遍历df的键
for key in sorted(df.keys()):
    # 对当前key对应的列表,按子列表第一个元素升序排序
    sorted_items = sorted(df[key], key=lambda x: x[0])
    if key in hf: 
        deliverable.write(bytes(f"{1} {bag_to_svmlight(sorted_items)}\n", 'utf-8'))
    else: 
        deliverable.write(bytes(f"{0} {bag_to_svmlight(sorted_items)}\n", 'utf-8'))

关键逻辑说明

  • sorted(df.keys()):将df的所有键按升序排列,保证遍历顺序为11 → 78 → 190,符合你要的字典key排序要求
  • sorted(df[key], key=lambda x: x[0]):针对每个key对应的列表,使用lambda表达式指定排序依据为子列表(元组)的第一个元素,实现列表内部的升序排列

如果需要提前生成完整的排序后字典(方便后续复用),也可以用字典推导式预处理:

# 生成按key升序、且每个值列表已排序的新字典
sorted_df = {
    key: sorted(value, key=lambda x: x[0])
    for key, value in sorted(df.items(), key=lambda item: item[0])
}

# 遍历预处理后的字典进行写入
for key in sorted_df:
    if key in hf: 
        deliverable.write(bytes(f"{1} {bag_to_svmlight(sorted_df[key])}\n", 'utf-8'))
    else: 
        deliverable.write(bytes(f"{0} {bag_to_svmlight(sorted_df[key])}\n", 'utf-8'))

两种方式都能达成你的需求,前者在循环内即时处理节省内存,后者提前预处理方便后续多次使用,可根据实际场景选择。

内容的提问来源于stack exchange,提问作者Kin_99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 03:12:18