如何使用defaultdict行为扩展OrderedDict [英] How to extend OrderedDict with defaultdict behavior

查看:130
本文介绍了如何使用defaultdict行为扩展OrderedDict的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a list of OrderedDict objects. I would like to combine all of them together and then sort them by the fruit attribute in each of them. I have been trying to combine and sort them using defaultdict using the code below:

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 来执行此操作,但是我无法使其正常工作。这是我尝试的方法:

With this I get one key and all the associated values, but I lose the original order. So I tried to do it with an OrderedDict, but I cannot get it to work. This is what I tried:

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 对象。

My main goal is to keep the original order of the dictionaries but combine them into three different OrderedDict objects based on the fruit keys.

推荐答案

而不是常规的 OrderedDict ,请尝试添加 defaultdict 的子类。 em>行为:

Instead of a regular OrderedDict, try a subclass that adds in defaultdict behavior:

class OrderedDictWithDefaultList(OrderedDict):
    def __missing__(self, key):
        value = list()
        self[key] = value
        return value

这篇关于如何使用defaultdict行为扩展OrderedDict的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆