如何使用defaultdict行为

时间:2017-02-23 00:12:19

标签: python data-structures ordereddictionary defaultdict dictionary-missing

我有一个orderdicts列表。我想将所有这些组合在一起,然后根据每个中的fruit属性对它们进行排序。我已经通过下面的代码使用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)  

有了这个,我得到一个键和所有相关的值,但我松开了原始的顺序。所以我尝试用orderDict来做,但我不能让它工作,下面是我尝试的。

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) 

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

1 个答案:

答案 0 :(得分:5)

尝试添加 defaultdict 行为的子类,而不是常规 OrderedDict

char * input = malloc(50)    
fgets(input, sizeof input, stdin)