具有多个值到嵌套列表的字典

时间:2012-01-01 21:00:42

标签: python dictionary python-3.x nested-lists

我有一个具有以下结构的字典:

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

我想按每个元组的第3个值对这个字典进行排序。我无法想象用数据设置作为字典来实现这一目标的方法,但如果我可以将数据转换为嵌套列表,那么应该相当容易:

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

我正在寻找最有效的代码来实现这一目标。如果有一种方法可以对这个词典进行排序而不进行转换,那将是理想的选择。如果没有,将非常感谢从字典到嵌套列表的转换的任何帮助。感谢。

3 个答案:

答案 0 :(得分:3)

使用内置key函数的sorted参数:

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

但是,从长远来看,最好对数据进行标准化,以使值都具有相同的格式。

答案 1 :(得分:0)

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

答案 2 :(得分: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)