如何对字典中列表内的元组进行内部元素排序?
问题描述
我有一个字典,其值为元组组成的列表(列表长度不固定),每个元组包含两个数字。示例字典如下:
f = {'diff0': [(7, 4), (4, 8), (8, 7)], 'diff1': [(3, 1), (3, 2), (3, 11)]}
需要对每个元组内部的数字进行排序,同时保持元组在列表中的顺序不变,预期得到结果:
f = {'diff0': [(4, 7), (4, 8), (7, 8)], 'diff1': [(1, 3), (2, 3), (3, 11)]}
此前我在非字典场景下处理过类似问题,当时使用的代码如下(用于对列表内的元组逐个排序):
for s in range(len(diffA0)): diffA0[s] = tuple(sorted(diffA0[s]))
这段代码可将diffA0: [(7, 9), (7, 4), (7, 6), (7, 8)]转换为diffA0: [(7, 9), (4, 7), (6, 7), (7, 8)]。
解决方案
基于你之前处理列表的思路,只需遍历字典的每个值(即元组列表),再对列表内的每个元组执行排序操作即可,以下是两种实现方式:
方式一:原地修改原字典
直接遍历字典的键,对每个键对应的元组列表进行修改:
for key in f: for idx in range(len(f[key])): f[key][idx] = tuple(sorted(f[key][idx]))
方式二:创建新字典(不改动原字典)
如果需要保留原字典,可以生成一个新字典,这里提供两种写法:
常规循环写法
new_f = {} for key, tuples_list in f.items(): sorted_list = [tuple(sorted(t)) for t in tuples_list] new_f[key] = sorted_list
字典推导式写法(更简洁)
new_f = {key: [tuple(sorted(t)) for t in tuples_list] for key, tuples_list in f.items()}
以上方法都能实现需求,字典推导式写法更简洁高效,适用于Python 3及以上版本。
内容的提问来源于stack exchange,提问作者maxwell_742
相关产品推荐
相关产品推荐

