我知道有很多解决方案(How do I sort a dictionary by value?)来按值对字典进行排序。但是,其中大多数早于python 3.7对dictionary的更改。
我也知道Fastest way to sort a python 3.7+ dictionary,它似乎很接近我需要的答案。
我有一个很大的键字典,这些键是整数,值是一组字符串。
我想创建一个新字典,该字典按照每个值的长度排序。
字典:
dict1={
'12':{'sym1', 'sym2'},
'13':{'sym1', 'sym4', 'sym5', 'sym6'},
'14':{'sym1', 'sym3'},
'15':{'sym2'},
'16':{'sym2'},
'17':{'sym2'},
'18':{'sym3', 'sym89', 'sym34', 'sym5', 'sym88'}
}
新排序的字典:
>>sorted_dict1
{
'18':{'sym3', 'sym89', 'sym34', 'sym5', 'sym88'},
'13':{'sym1', 'sym4', 'sym5', 'sym6'},
'12':{'sym1', 'sym2'},
'14':{'sym1', 'sym3'},
'15':{'sym2'},
'16':{'sym2'},
'17':{'sym2'}
}
答案 0 :(得分:0)
我认为这是一种非常慢的方法,但是可以这样:
from operator import itemgetter
dict1={
'12':{'sym1', 'sym2'},
'13':{'sym1', 'sym4', 'sym5', 'sym6'},
'14':{'sym1', 'sym3'},
'15':{'sym2'},
'16':{'sym2'},
'17':{'sym2'},
'18':{'sym3', 'sym89', 'sym34', 'sym5', 'sym88'}
}
dict1_len ={}
for k,v in dict1.items():
dict1_len.update({k:len(v)})
dict1_len
按相反的值编号(降序排列)。sorted_dict1_len = {k: v for k,v in sorted(dict1_len.items(), key=itemgetter(1), reverse=True)}
sorted_dict1_len
给定的顺序使用键,将键和原始dict1
给定的键值添加到sorted_dict1
。sorted_dict1 = {}
for k in sorted_dict1_len.keys():
print(k)
sorted_dict1.update({k:dict1.get(k)})
from operator import itemgetter
dict1={
'12':{'sym1', 'sym2'},
'13':{'sym1', 'sym4', 'sym5', 'sym6'},
'14':{'sym1', 'sym3'},
'15':{'sym2'},
'16':{'sym2'},
'17':{'sym2'},
'18':{'sym3', 'sym89', 'sym34', 'sym5', 'sym88'}
}
def len_val(tup):
return len(tup[1]) # length of the value i.e. elements in set
dict2 = sorted(dict1.items(), key=len_val, reverse=True)
print(dict2)
返回
[('18', {'sym88', 'sym5', 'sym89', 'sym3', 'sym34'}), ('13', {'sym1', 'sym5', 'sym6', 'sym4'}), ('12', {'sym1', 'sym2'}), ('14', {'sym3', 'sym1'}), ('15', {'sym2'}), ('16', {'sym2'}), ('17', {'sym2'})]