对列表的dict进行排序表示

2024-09-30 20:24:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本像这样的单子字典

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]来排序。我怎样才能做到?你知道吗


Tags: 文件对象keyinfordatetime字典顺序
3条回答

您需要使用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]))

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模块的^{}

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

这将创建一个dictionary作为您的字典,但同时它将保持其项插入第一位的顺序(在本例中是在for循环期间)

不确定是否理解您的问题,但这里有一种方法可以创建排序键列表:

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中的内置类型

相关问题 更多 >