5

我有一个OrderedDict对象列表。我想将所有这些组合在一起,然后按每个水果的属性对它们进行排序。我一直在尝试defaultdict使用以下代码对它们进行组合和排序:

super_dict_apple = defaultdict(list)
super_dict_orange = defaultdict(list)
super_dict_no_fruit = defaultdict(list)


for d in dict:
        if 'fruit' not in d:
            for k, v in d.iteritems():
                super_dict_no_fruit[k].append(v)
        elif d['fruit'] == 'Apple':
            for k, v in d.iteritems():
                super_dict_apple[k].append(v)
        elif d['fruit'] == 'orange':
            for k, v in d.iteritems():
                super_dict_orange[k].append(v)  

有了这个,我得到一个键和所有相关的值,但我失去了原来的顺序。所以我试图用 来做OrderedDict,但我无法让它工作。这是我尝试过的:

from collections import OrderedDict

order_dict_no_fruit = OrderedDict()
order_dict_apple = OrderedDict()
order_dict_orange = OrderedDict()

for d in dict:
        if 'fruit' not in d:
            for k, v in d.iteritems():
                order_dict_no_fruit[k].append(v)
        elif d['fruit'] == 'Apple':
            for k, v in d.iteritems():
                order_dict_apple[k].append(v)
        elif d['fruit'] == 'orange':
            for k, v in d.iteritems():
                order_dict_orange[k].append(v) 

我的主要目标是保持字典的原始顺序,但OrderedDict根据水果键将它们组合成三个不同的对象。

4

1 回答 1

9

代替常规的OrderedDict,尝试添加defaultdict行为的子类:

class OrderedDictWithDefaultList(OrderedDict):
    def __missing__(self, key):
        value = list()
        self[key] = value
        return value
于 2017-02-23T00:30:44.317 回答