Python 将具有多个值的字典添加到嵌套列表

Python 将具有多个值的字典添加到嵌套列表,python,python-3.x,list,dictionary,nested-lists,Python,Python 3.x,List,Dictionary,Nested Lists,我有一本结构如下的词典: {'ONE' : (4, 6, 9), 'TWO' : (3, 8, 10)} 我想按每个元组的第三个值对这本词典进行排序。我真的想不出一种将数据设置为字典的方法来实现这一点,但如果我可以将数据转换为嵌套列表(如以下所示),则应该相当容易: [['ONE', 4, 6, 9], ['TWO', 3, 8, 10]] 我正在寻找实现这一点的最有效的代码。如果有一种方法可以在不转换字典的情况下对其进行排序,那将是理想的。若并没有,任何从字典到嵌套列表的转换帮助都将不胜感

我有一本结构如下的词典:

{'ONE' : (4, 6, 9), 'TWO' : (3, 8, 10)}
我想按每个元组的第三个值对这本词典进行排序。我真的想不出一种将数据设置为字典的方法来实现这一点,但如果我可以将数据转换为嵌套列表(如以下所示),则应该相当容易:

[['ONE', 4, 6, 9], ['TWO', 3, 8, 10]]
我正在寻找实现这一点的最有效的代码。如果有一种方法可以在不转换字典的情况下对其进行排序,那将是理想的。若并没有,任何从字典到嵌套列表的转换帮助都将不胜感激。谢谢。

这里有一种方法:

nestedlist = [[key] + list(value) for key,value in dictionary.items() if value != 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)

使用内置排序函数的
参数:

>>> 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))]

但是,从长远来看,可能最好规范化数据,使所有值都具有相同的格式。

字典没有顺序的概念,因此无法对它们进行排序。实际上,Python2.7具有相同的功能,但它们只记得输入键的顺序。您仍然需要一些技巧来对数据进行排序(并在此过程中创建一个新的
OrderedDict
),我得到一个“int”不可编辑的错误。我的实际字典相当庞大,一个字符串作为键,每个值在一个元组中有三个浮点数。例如:'巴西共和国':(0.013454,0.005123,0.008417369999)@PatrickD,您的字典中的一个值是否可能不是元组而是int?这可以解释你得到的错误。听起来像@RobWouters说的,是的。啊,是的,通过字典查看,有些值是0而不是元组。有什么变通建议吗?取决于您希望将这些条目翻译成什么:)这会给他一个包含非常规元素的列表。他打算按每个元组的第三个值进行排序。。。在将字典翻译成列表时不会失败,但在排序时会失败。你们都太棒了。这很好,虽然所有的建议都非常有用,但我认为这是最简单的方法(在我删除ints之后)@PatrickD。我已经用一个能处理ints的版本更新了我的答案。