使用内部字典值对外部字典排序(Python)

2024-06-14 06:14:02 发布

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

我现在有一本字典,看起来像这样:

mydict = {
1: {
    "desc": "lol",
    "completed": False,
    "priority": 2,
    "project": "lpl"

},
12: {
    "desc": "lol",
    "completed": False,
    "priority": 1,
    "project": "lpl"

},
13: {
    "desc": "lol",
    "completed": False,
    "priority": 0,
    "project": "lpl"

}}

我想按优先级排序,可以吗?你知道吗


Tags: projectfalse字典排序descmydictlolpriority
3条回答

在纯python中,可以按以下方式进行

mydict = {
    1: {
        "desc": "lol",
        "completed": False,
        "priority": 2,
        "project": "lpl"

    },
    12: {
        "desc": "lol",
        "completed": False,
        "priority": 1,
        "project": "lpl"

    },
    13: {
        "desc": "lol",
        "completed": False,
        "priority": 0,
        "project": "lpl"

    }}


def func(x):
    return mydict[x]['priority']


m = sorted(mydict, key=func)
for item in m:
    print(item, mydict[item])

将打印在o/p-

13 {'desc': 'lol', 'completed': False, 'priority': 0, 'project': 'lpl'}
12 {'desc': 'lol', 'completed': False, 'priority': 1, 'project': 'lpl'}
1 {'desc': 'lol', 'completed': False, 'priority': 2, 'project': 'lpl'}

如果要按升序(从最小到最大)排序:

sorted(mydict, key=lambda k: mydict[k]['priority'])

如果您喜欢按降序排列(从大到小)

sorted(mydict, key=lambda k: mydict[k]['priority'], reverse=True)

这将返回按排序顺序排列的键列表。例如,要按排序顺序遍历您给出的示例列表,您可以执行以下操作:

sorted_keys = sorted(mydict, key=lambda k: mydict[k]['priority'])

for k in sorted_keys:
     do_something_with(mydict[k])

但请记住,这不会修改原来的格言

按优先级排序:

sorted(mydict.iteritems(), key=lambda key_value: key_value[1].get('priority'))

如果使用Python2.7.*到Python3.5,那么您将需要使用OderEdict from collections以便回溯到字典,否则您将失去顺序。你知道吗

from collections import OrderedDict
OrderedDict(sorted(mydict.iteritems(), key=lambda key_value: key_value[1].get('priority')))

来自python3.6+dictionaries are ordered,基于插入顺序

相关问题 更多 >