我有一个像
这样的列表字典dict = {'p1':[a,b,c,d,f]}
,其中
a
和b
是mx.DateTime.DateTime
个对象,即时间; c
和f
是mx.DateTime.DateTimeDelta
个对象,即a
和b
之间的操作结果; d
是一个布尔值。我想从按时间顺序排序的文件中的字典中写一些值:
for key in dict:
f.write(key+' ')
f.write(str(dict[key][4]))
f.write('\n')
但我无法弄清楚如何按dict[key][4]
排序。我该怎么做?
答案 0 :(得分:2)
不确定理解您的问题,但这里有一种方法可以创建排序键列表:
dic = {'p1':[0,0,0,0,7], 'p2': [0,0,0,0,5], 'p3': [0,0,0,0,8]}
sorted_keys = sorted(dic, key=lambda k: dic[k][4])
print sorted_keys
# ['p2', 'p1', 'p3']
PS:请不要将dict
用作变量名,因为它是Python中的内置类型
答案 1 :(得分:2)
dict
本质上是数据结构,它不保持其项目(键:值)对的顺序,所以,如果你想从你的字典中写出一个排序值,这里有一种方法:
>>> dt = {'p1':[1,2,3,4], 'p2':[2,1,4,3], 'p3':[4,3,2,1]}
>>>
>>> sorted(dt.items(), key=lambda x:x[1][1])
[('p2', [2, 1, 4, 3]), ('p1', [1, 2, 3, 4]), ('p3', [4, 3, 2, 1])]
>>>
>>> sorted(dt.items(), key=lambda x:x[1][2])
[('p3', [4, 3, 2, 1]), ('p1', [1, 2, 3, 4]), ('p2', [2, 1, 4, 3])]
>>>
>>> sorted(dt.items(), key=lambda x:x[1][3])
[('p3', [4, 3, 2, 1]), ('p2', [2, 1, 4, 3]), ('p1', [1, 2, 3, 4])]
>>>
然后你可以遍历它来写入你的文件:
>>> mylist = sorted(dt.items(), key=lambda x:x[1][3])
[('p3', [4, 3, 2, 1]), ('p2', [2, 1, 4, 3]), ('p1', [1, 2, 3, 4])]
>>> for item in my_list:
f.write('{} - {}'.format(*item))
#Output will something like:
#p3 - [4, 3, 2, 1]
#p2 - [2, 1, 4, 3]
#p1 - [1, 2, 3, 4]
另一方面,如果您的词典中的项目顺序对您很重要,那么我建议您使用collections
模块中的OrderedDict
:
>>> from collections import OrderedDict
>>>
>>>
>>> dt_orderd = OrderedDict()
>>>
>>> for k,v in sorted(dt.items(), key=lambda x:x[1][3]):
dt_ordered[k] = v
>>> dt_orderd
OrderedDict([('p3', [4, 3, 2, 1]), ('p2', [2, 1, 4, 3]), ('p1', [1, 2, 3, 4])])
>>>
>>>
>>> dt_orderd['p1']
[1, 2, 3, 4]
这将创建一个字典作为你的字典,但同时它将保持其首先插入项目的顺序(在这种情况下for
循环期间)
答案 2 :(得分:0)
您需要使用dict.items()
将您的dict转换为列表,因为dict无法排序。
这将返回元组[('p1':[a,b,c,d,f])]
在该列表中,您可以访问element[1][4]
以检索f
您可以将其应用于排序:
for key, value in sorted(dict.items(), key=lambda element : element[1][4]):
f.write('{0} {1}\n'.format(key, value[4]))