我有一个具有以下结构的字典:
{'ONE' : (4, 6, 9), 'TWO' : (3, 8, 10)}
我想按每个元组的第3个值对这个字典进行排序。我无法想象用数据设置作为字典来实现这一目标的方法,但如果我可以将数据转换为嵌套列表,那么应该相当容易:
[['ONE', 4, 6, 9], ['TWO', 3, 8, 10]]
我正在寻找最有效的代码来实现这一目标。如果有一种方法可以对这个词典进行排序而不进行转换,那将是理想的选择。如果没有,将非常感谢从字典到嵌套列表的转换的任何帮助。感谢。
答案 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)