Python实现字典按键字母序排序,值列表按长度排序及扩展需求
解决方案
需求1:字典按键字母顺序排序,值列表按元素长度排序
直接对字典按键排序,再对每个值列表按元素长度排序:
# 按键的字母顺序生成有序字典(Python3.7+支持字典插入顺序保留) sorted_dict = dict(sorted(test_dict.items())) # 遍历每个键,对对应的值列表按元素长度排序 for key in sorted_dict: sorted_dict[key].sort(key=lambda x: len(x)) # 输出结果 print(sorted_dict)
运行后会得到预期结果:
{'best': ['six', 'ten'], 'gfg': ['One', 'six', 'three'], 'is': ['nine', 'eight', 'seven']}
需求2:值列表按长度排序,长度相同时随机排序
通过给同长度元素添加随机排序权重,实现同长度元素的随机排列:
import random sorted_dict = dict(sorted(test_dict.items())) for key in sorted_dict: # 排序key为(元素长度, 随机数),长度相同则按随机数排序 sorted_dict[key].sort(key=lambda x: (len(x), random.random())) print(sorted_dict)
每次运行时,同长度的元素顺序会随机变化,比如is对应的列表中,长度为5的seven/eight/nine每次排序结果都可能不同。
需求3:值列表完全随机排序
使用random.shuffle直接打乱每个值列表:
import random sorted_dict = dict(sorted(test_dict.items())) for key in sorted_dict: # shuffle原地打乱列表,无需返回值 random.shuffle(sorted_dict[key]) print(sorted_dict)
此代码会保持字典按键的字母顺序排列,同时每个值列表的元素完全随机打乱。
内容的提问来源于stack exchange,提问作者Gabriel Yeow
相关产品推荐
相关产品推荐

