使用unicode索引django按日期排序字典

时间:2014-08-19 21:31:37

标签: list dictionary

我有一本字典,就像这样

available= [(u'Small w/b',
{
'20/08': {'total': 18, 'availability': 10, 'full': False},
'19/08': {'total': 18, 'availability': 5, 'full': False},
    '23/08': {'total': 18, 'availability': 9, 'full': False},
    '22/08': {'total': 18, 'availability': 11, 'full': False}, 
    '21/08': {'total': 18, 'availability': 16, 'full': False}
    }),
('dates', ['19/08', '20/08', '21/08', '22/08', '23/08']),
(u'Medium', 
    {
    '20/08': {'total': 32, 'availability': 29, 'full': False},
    '19/08': {'total': 32, 'availability': 32, 'full': False},
    '23/08': {'total': 32, 'availability': 31, 'full': False},
    '22/08': {'total': 32, 'availability': 30, 'full': False},
    '21/08': {'total': 32, 'availability': 29, 'full': False}
    }),
(u'Matrimonial', 
    {
    '20/08': {'total': 3, 'availability': 3, 'full': False}, 
    '19/08': {'total': 3, 'availability': 2, 'full': False}, 
    '23/08': {'total': 3, 'availability': 3, 'full': False},
    '22/08': {'total': 3, 'availability': 2, 'full': False},
    '21/08': {'total': 3, 'availability': 3, 'full': False}
    }),
(u'Large',
    {
    '20/08': {'total': 30, 'availability': 26, 'full': False},
    '19/08': {'total': 30, 'availability': 21, 'full': False},
    '23/08': {'total': 30, 'availability': 25, 'full': False},
    '22/08': {'total': 30, 'availability': 25, 'full': False},
    '21/08': {'total': 30, 'availability': 25, 'full': False}
    }), 
(u'Backpacker', 
    {
    '20/08': {'total': 12, 'availability': 4, 'full': False},
    '19/08': {'total': 12, 'availability': 6, 'full': False},
    '23/08': {'total': 12, 'availability': 11, 'full': False},
    '22/08': {'total': 12, 'availability': 6, 'full': False},
    '21/08': {'total': 12, 'availability': 7, 'full': False}
    })]

available= [(u'Small w/b', { '20/08': {'total': 18, 'availability': 10, 'full': False}, '19/08': {'total': 18, 'availability': 5, 'full': False}, '23/08': {'total': 18, 'availability': 9, 'full': False}, '22/08': {'total': 18, 'availability': 11, 'full': False}, '21/08': {'total': 18, 'availability': 16, 'full': False} }), ('dates', ['19/08', '20/08', '21/08', '22/08', '23/08']), (u'Medium', { '20/08': {'total': 32, 'availability': 29, 'full': False}, '19/08': {'total': 32, 'availability': 32, 'full': False}, '23/08': {'total': 32, 'availability': 31, 'full': False}, '22/08': {'total': 32, 'availability': 30, 'full': False}, '21/08': {'total': 32, 'availability': 29, 'full': False} }), (u'Matrimonial', { '20/08': {'total': 3, 'availability': 3, 'full': False}, '19/08': {'total': 3, 'availability': 2, 'full': False}, '23/08': {'total': 3, 'availability': 3, 'full': False}, '22/08': {'total': 3, 'availability': 2, 'full': False}, '21/08': {'total': 3, 'availability': 3, 'full': False} }), (u'Large', { '20/08': {'total': 30, 'availability': 26, 'full': False}, '19/08': {'total': 30, 'availability': 21, 'full': False}, '23/08': {'total': 30, 'availability': 25, 'full': False}, '22/08': {'total': 30, 'availability': 25, 'full': False}, '21/08': {'total': 30, 'availability': 25, 'full': False} }), (u'Backpacker', { '20/08': {'total': 12, 'availability': 4, 'full': False}, '19/08': {'total': 12, 'availability': 6, 'full': False}, '23/08': {'total': 12, 'availability': 11, 'full': False}, '22/08': {'total': 12, 'availability': 6, 'full': False}, '21/08': {'total': 12, 'availability': 7, 'full': False} })]

现在看起来像这样。我想迭代两个词典并将每个项目中的日期排序到正确的顺序。我该怎么办?

1 个答案:

答案 0 :(得分:0)

不幸的是,您无法订购字典的键,因为dicts是无序的 但是,您可以使用items()将键值对转换为元组列表,然后使用sorted对列表进行排序:

for elem in available:
    if elem[0] != 'dates':
        print sorted(elem[1].items())

将打印出来:

[('19/08', {'total': 18, 'availability': 5, 'full': False}), ('20/08', {'total': 18, 'availability': 10, 'full': False}), ('21/08', {'total': 18, 'availability': 16, 'full': False}), ('22/08', {'total': 18, 'availability': 11, 'full': False}), ('23/08', {'total': 18, 'availability': 9, 'full': False})]
[('19/08', {'total': 32, 'availability': 32, 'full': False}), ('20/08', {'total': 32, 'availability': 29, 'full': False}), ('21/08', {'total': 32, 'availability': 29, 'full': False}), ('22/08', {'total': 32, 'availability': 30, 'full': False}), ('23/08', {'total': 32, 'availability': 31, 'full': False})]
[('19/08', {'total': 3, 'availability': 2, 'full': False}), ('20/08', {'total': 3, 'availability': 3, 'full': False}), ('21/08', {'total': 3, 'availability': 3, 'full': False}), ('22/08', {'total': 3, 'availability': 2, 'full': False}), ('23/08', {'total': 3, 'availability': 3, 'full': False})]
[('19/08', {'total': 30, 'availability': 21, 'full': False}), ('20/08', {'total': 30, 'availability': 26, 'full': False}), ('21/08', {'total': 30, 'availability': 25, 'full': False}), ('22/08', {'total': 30, 'availability': 25, 'full': False}), ('23/08', {'total': 30, 'availability': 25, 'full': False})]
[('19/08', {'total': 12, 'availability': 6, 'full': False}), ('20/08', {'total': 12, 'availability': 4, 'full': False}), ('21/08', {'total': 12, 'availability': 7, 'full': False}), ('22/08', {'total': 12, 'availability': 6, 'full': False}), ('23/08', {'total': 12, 'availability': 11, 'full': False})]