字典中多个值转为嵌套列表

1 投票
3 回答
1862 浏览
提问于 2025-04-17 09:22

我有一个字典,结构如下:

{'ONE' : (4, 6, 9), 'TWO' : (3, 8, 10)}

我想按照每个元组的第三个值来对这个字典进行排序。由于数据是以字典的形式存储的,我一时想不出怎么做到这一点。不过,如果我能把数据转换成一个嵌套列表,像下面这样,那就简单多了:

[['ONE', 4, 6, 9], ['TWO', 3, 8, 10]]

我希望能找到最有效的代码来实现这个目标。如果有办法在不转换的情况下直接对这个字典进行排序,那就最好不过了。如果不行的话,任何关于如何将字典转换为嵌套列表的帮助我都非常感激。谢谢。

3 个回答

0

在编程中,有时候我们会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们可以去一些技术论坛,比如StackOverflow,寻求帮助。在这些论坛上,很多人会分享他们的经验和解决方案,帮助其他人解决类似的问题。

当你在这些论坛上提问时,记得描述清楚你的问题,包括你遇到的错误信息、你使用的代码,以及你希望实现的目标。这样,其他人才能更好地理解你的问题,并给出有效的建议。

同时,查看别人提问和回答的问题也是一个很好的学习方式。你可以从中学到很多实用的知识和技巧,帮助你在编程的道路上走得更远。

nestedlist = [[key] + list(value) for key,value in dictionary.items() if value != 0]
0

这里有一种方法:

result = []
for key, value in dictionary.items():
    result.append([key] + list(value))

如果你的一些值是 int 类型,而不是元组,那就试试这个:

result = []
for key, value in dictionary.items():
    try:
        lst = list(value)
    except TypeError:
        lst = [value]
    result.append([key] + lst)
3

使用内置的 sorted 函数时,可以利用 key 这个参数来帮助排序:

>>> d = {'ONE' : (4, 6, 9), 'TWO' : (3, 8, 10), 'FOUR': (2, 5, 8)}
>>> sorted(d.iteritems(), key=lambda i: i[1][2])
[('FOUR', (2, 5, 8)), ('ONE', (4, 6, 9)), ('TWO', (3, 8, 10))]

编辑

如果有些值是整数而不是元组,那么可以尝试下面这种方法:

>>> d = {'ONE' : (4, 6, 9), 'TWO' : (3, 8, 10), 'FOUR': (2, 5, 8), 'THREE': 0}
>>> sorted(d.iteritems(),
...        key=lambda i: i[1][2] if isinstance(i[1], tuple) else i[1])
[('THREE', 0), ('FOUR', (2, 5, 8)), ('ONE', (4, 6, 9)), ('TWO', (3, 8, 10))]

不过,从长远来看,最好还是把数据整理成统一的格式,这样会更好。

撰写回答