根据特定值订购词典

2024-06-30 13:34:21 发布

您现在位置:Python中文网/ 问答频道 /正文

在编写函数之前,我希望确保没有预构建(优化)的解决方案(如sorted())可以:

从这样的字典里:

tags = {'pinoyako':{'likes': 119, 'comments': 11, 'count': 1}, 'dii':{'likes': 151, 'comments': 3, 'count': 1},'djiphantom3':{'likes': 127, 'comments': 6, 'count': 1}}

根据“likes”、“comments”或“count”排序键。如果基于“likes”,则输出应该是一个按顺序排列的列表:

output = [['dii',151],['djiphantom3',127],['pinoyako',119]]

Tags: 函数列表output字典排序counttags解决方案
2条回答

使用sorted()函数中的generator expression和适当的键函数:

In [22]: from operator import itemgetter
In [23]: sorted(((k, v['likes']) for k, v in tags.items()), key=itemgetter(1), reverse=True)
Out[23]: [('dii', 151), ('djiphantom3', 127), ('pinoyako', 119)]

你需要更多的条目来说明。检查此项:

tags = {'pinoyako':{'likes': 119, 'comments': 11, 'count': 1},
        'pinoyako2':{'likes': 120, 'comments': 5, 'count': 2},
        'djiphantom32':{'likes': 1275, 'comments': 61, 'count': 15},
        'dii2':{'likes': 151, 'comments': 33, 'count': 13},
        'dii':{'likes': 151, 'comments': 3, 'count': 1},
        'djiphantom3':{'likes': 1275, 'comments': 61, 'count': 1}
        }
tags_sorted = sorted(tags.items(), key=lambda x: (x[1]['likes'], x[1]['comments'], x[1]['count']))
tags_sorted

输出:

[('pinoyako', {'comments': 11, 'count': 1, 'likes': 119}),
 ('pinoyako2', {'comments': 5, 'count': 2, 'likes': 120}),
 ('dii', {'comments': 3, 'count': 1, 'likes': 151}),
 ('dii2', {'comments': 33, 'count': 13, 'likes': 151}),
 ('djiphantom3', {'comments': 61, 'count': 1, 'likes': 1275}),
 ('djiphantom32', {'comments': 61, 'count': 15, 'likes': 1275})]

然后你可以这样做:

tags_sorted = [[k, v['likes']] for k,v in tags_sorted]
tags_sorted

输出:

[['pinoyako', 119],
 ['pinoyako2', 120],
 ['dii', 151],
 ['dii2', 151],
 ['djiphantom3', 1275],
 ['djiphantom32', 1275]]

相关问题 更多 >