情况稍微有点复杂,语言描述有点乏力,先上需求:
如下所示的字典,key的格式是“字母+数字”,value则是一个列表,并且列表中的元素格式和key是一样的,但是这个列表可能有多个值,我的需求有两个,一个是先让字典按照key中数字的大小从小到大排列,二是对于每个value,也要得到按照每个元素中的数字从小到大的排列。
chunk_rel_dict = {'T20':['T19','T2','T3','T24'],'T21':['T19'],'T22':['T19'],'T17':[],'T18':[],'T19':[],'T3':['T4'],'T4':['T5'],'T5':['T6']}
下面直接上代码:
chunk_rel_dict = dict(sorted(chunk_rel_dict.items(),key=lambda item:int(item[0][1:])))
print(chunk_rel_dict)
def by_number(t):
return int(t[1:])
for key,value in chunk_rel_dict.items():
value = sorted(value,key=by_number)
chunk_rel_dict[key] = value
print(chunk_rel_dict)
首先使用sorted()函数和lambda结合得到根据key中数字的排列,这种情况下得到的是元组,然后使用dict()将之转化为字典,这样就满足了第一个需求。然后定义一个得到每个元素中数字的函数b y_number(),然后再对上述字典遍历,对每一个value采用sorted()函数和b y_number()相结合的方式根据value中元素的数字部分进行排序,最后将排完序的value赋值给相应的字典中的key。经过上述两个步骤,上述两个需求变满足了。
得到的最终结果为:
{'T3': ['T4'], 'T4': ['T5'], 'T5': ['T6'], 'T17': [], 'T18': [], 'T19': [], 'T20': ['T19', 'T2', 'T3', 'T24'], 'T21': ['T19'], 'T22': ['T19']}
{'T3': ['T4'], 'T4': ['T5'], 'T5': ['T6'], 'T17': [], 'T18': [], 'T19': [], 'T20': ['T2', 'T3', 'T19', 'T24'], 'T21': ['T19'], 'T22': ['T19']}