如何根据排序键将字符串,值对放在字典中?

时间:2014-12-02 04:40:03

标签: python dictionary

我在C ++中寻找类似map的东西。我知道普通的python dict不支持订单。我在馆藏中找到了有序的。但它不能按预期工作。

>>> odict = OrderedDict()
>>> odict['z'] = '1'
>>> odict['a'] = '2'
>>> odict['y'] = '3'
>>> print(odict)
OrderedDict([('z', '1'), ('a', '2'), ('y', '3')])

但我想订购,就像这样:

OrderedDict([('a', '2'), ('y', '3'), ('z', '1')])

3 个答案:

答案 0 :(得分:2)

collections.OrderedDict会记住商品插入订单。您正在寻找类似于sorteddict ...

blist third party package之类的内容

另一种方法是在之前对键进行排序,然后将它们打包到OrderedDict中,但如果你需要添加更多的项目,事情可能会变得无法排序......

答案 1 :(得分:1)

Ordered dict以更新方式记住订单 你可以使用sort来排序:

>>> my_dict = {'a': 1, 'c': 3, 'b': 4}
>>> [x for x in sorted(a.items(),key=lambda x:x[0])]  # sorted on keys
[('a', 1), ('b', 4), ('c', 3)]

如果要对值进行排序:

>>> [x for x in sorted(a.items(),key=lambda x:x[1])]
[('a', 1), ('c', 3), ('b', 4)]

答案 2 :(得分:0)

您无法对订购的dict重新排序,订单会在添加数据时确定。但是你可以根据原作创建一个新的:

odict = OrderedDict([('z', 1), ('a', 2), ('y', 3)])
odict_sorted = OrderedDict(sorted(odict.iteritems()))

# gives OrderedDict([('a', 2), ('y', 3), ('z', 1)])