对列表的字典

时间:2016-03-31 16:54:11

标签: python python-2.7

我有一个像

这样的列表字典
dict = {'p1':[a,b,c,d,f]}

,其中

  • abmx.DateTime.DateTime个对象,即时间;
  • cfmx.DateTime.DateTimeDelta个对象,即ab之间的操作结果;
  • d是一个布尔值。

我想从按时间顺序排序的文件中的字典中写一些值:

for key in dict:
        f.write(key+'  ')
        f.write(str(dict[key][4]))
        f.write('\n')

但我无法弄清楚如何按dict[key][4]排序。我该怎么做?

3 个答案:

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