根据时间值对字典中的元组进行排序

时间:2017-09-21 09:49:01

标签: python sorting dictionary tuples

我的字典看起来像这样:

dict1 = {'key1': ['x1', [(time1,value1), (time3,value3), (time2,value2)]],
         'key2': ['x2', [(time6,value6), (time4,value4), (time5,value5)]],
          ...}

对于字典中的每个键,我希望根据时间对元组进行排序。看一下上面的例子,假设

time1 < time2 < time3
time4 < time5 < time6

我想要的输出是

dict1 = {'key1': ['x1', [(time1,value1), (time2,value2), (time3,value3)]],
         'key2': ['x2', [(time4,value4), (time5,value5), (time6,value6)]],
          ...}

每个键的第一个值&#39; x1&#39;,&#39; x2&#39; ..等是多余的,应该(如果有的话)被删除。

任何人都可以帮我解决根据时间值对字典中的元组进行排序的问题吗?

提前多多感谢。

1 个答案:

答案 0 :(得分:2)

您可以在sorted使用词典理解:

>>> {k: [v[0]] + [sorted(v[1])] for k, v in dict1.items()}
{'key1': ['x1', [('time1', 'value1'), ('time2', 'value2'), ('time3', 'value3')]],
 'key2': ['x2', [('time4', 'value4'), ('time5', 'value5'), ('time6', 'value6')]]}

如果要删除x值,可以将其简化为:

>>> {k: sorted(v[1]) for k, v in dict1.items()}
{'key1': [('time1', 'value1'), ('time2', 'value2'), ('time3', 'value3')],
 'key2': [('time4', 'value4'), ('time5', 'value5'), ('time6', 'value6')]}

我在这里使用字符串而不是实际的时间和值,但只要这些时间对象正确比较,代码就会一样。使用sorted,元组列表将按照这些元组中的第一个元素进行排序(如果第一个元素相等则为第二个元素,等等)。