如何使用 defaultdict 行为扩展 OrderedDict
How to extend OrderedDict with defaultdict behavior
我有一个 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
对象。
而不是常规的 OrderedDict,尝试添加 defaultdict 行为的子类:
class OrderedDictWithDefaultList(OrderedDict):
def __missing__(self, key):
value = list()
self[key] = value
return value
我有一个 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
对象。
而不是常规的 OrderedDict,尝试添加 defaultdict 行为的子类:
class OrderedDictWithDefaultList(OrderedDict):
def __missing__(self, key):
value = list()
self[key] = value
return value