Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 在python 2.7中对所有组中的第三级嵌套字典进行排序_Python 2.7 - Fatal编程技术网

Python 2.7 在python 2.7中对所有组中的第三级嵌套字典进行排序

Python 2.7 在python 2.7中对所有组中的第三级嵌套字典进行排序,python-2.7,Python 2.7,我有一个嵌套字典,它不是列表列表,而是字典中的字典 MYDICT = { "groupA": { "teamA": { "won": 0, "lost": 1, }, "teamB": { "won": 1, "lost": 2, } }, "groupB": { "teamC": {

我有一个嵌套字典,它不是列表列表,而是字典中的字典

MYDICT = {
    "groupA": {
        "teamA": {
            "won": 0,
            "lost": 1,
        },
        "teamB": {
            "won": 1,
            "lost": 2,
        }
    },
    "groupB": {
        "teamC": {
            "won": 1,
            "lost": 2,
        },
        "teamD": {
            "won": 7,
            "lost": 3,
        }
    }
}
我想在每组中按“赢”字段进行排序。结果应该如下所示:

{
    "groupA": {
        "teamB": {
            "won": 1,
            "lost": 2,
        },
        "teamA": {
            "won": 0,
            "lost": 1,
        }
    },
    "groupB": {
        "teamD": {
            "won": 7,
            "lost": 3,
        },
        "teamC": {
            "won": 1,
            "lost": 2,
        }
    }
}
到目前为止我试过的代码是

newd = {k: dict(sorted(v.items(), key=lambda x: x[2], reverse=True)) for k, v in MYDICT.items()}
但它返回以下错误

IndexError: tuple index out of range
因此,很明显,我可能没有达到适当的分类水平

编辑1:我认为只有一个lambda不可能做到这一点。我改变了策略,开始迭代给定的级别

new_sorted=OrderedDict()
print('MYDICT: {}'.format(jd(MYDICT)))
for item in MYDICT:
    sorted_elements = sorted(MYDICT[item], key=lambda x: (MYDICT[item][x]['won']), reverse=True)
    for se in sorted_elements:
        print('se: {}'.format(se))
        new_sorted[item] = se
        print('MYDICT[item][se]: {}'.format(MYDICT[item][se]))
        new_sorted[item][se] = MYDICT[item][se]
        print('item: {}, sorted: {}'.format(item, sorted_elements))
现在,当我尝试重新分配这些值时(实际上我正在使用排序项创建新的排序字典),我出现了以下错误:

MYDICT: {
    "groupA": {
        "teamA": {
            "won": 0,
            "lost": 1
        },
        "teamB": {
            "won": 1,
            "lost": 2
        }
    },
    "groupB": {
        "teamD": {
            "won": 7,
            "lost": 3
        },
        "teamC": {
            "won": 1,
            "lost": 2
        }
    }
}
se: teamB
MYDICT[item][se]: {'won': 1, 'lost': 2}
Traceback (most recent call last):
  File "ordered_dict.py", line 124, in <module>
    new_sorted[item][se] = MYDICT[item][se]
TypeError: 'str' object does not support item assignment
MYDICT:{
“groupA”:{
“teamA”:{
“韩元”:0,
“丢失”:1
},
“团队B”:{
“韩元”:1,
“迷失”:2
}
},
“B组”:{
“团队”:{
“韩元”:7,
“迷失”:3
},
“teamC”:{
“韩元”:1,
“迷失”:2
}
}
}
se:teamB
MYDICT[item][se]:{'won':1,'lost':2}
回溯(最近一次呼叫最后一次):
文件“ordered_dict.py”,第124行,在
新的[项目][se]=MYDICT[项目][se]
TypeError:“str”对象不支持项分配
任何帮助都将不胜感激。

您的代码

newd = {k: dict(sorted(v.items(), key=lambda x: x[2], reverse=True))
        for k, v in MYDICT.items()}
他正在到达那里

  • 第二个元素(值)只是
    x[1]
    ,而不是
    x[2]
    ,因为在Python中元组索引从0开始
  • 您不希望直接按值排序,而是按值的
    “won”
    排序。这是
    x[1][“won”]
  • 与其他代码片段一样,您需要
    OrderedDict
    ,因为纯Python 2.7 dict没有顺序
因此:

可能重复的
newd = {k: OrderedDict(sorted(v.items(), key=lambda x: x[1]["won"], reverse=True))
        for k, v in MYDICT.items()}