I’m creating a defaultdict from an array of arrays:
>>> array = [['Aaron','1','2'],['Ben','3','4']]
>>> d = defaultdict(list)
>>> for i in array:
... d[i[0]].append({"num1":i[1],"num2":i[2]})
My expected outcome is:
>>> d
defaultdict(<type 'list'>, {'Aaron': {'num1': '1', 'num2': '2'},
'Ben': {'num1': '3', 'num2': '4'}})
But my outcome is:
>>> d
defaultdict(<type 'list'>, {'Aaron': [{'num1': '1', 'num2': '2'}],
'Ben': [{'num1': '3', 'num2': '4'}]})
It is as if defaultdict is trying to keep my values in an array because that is the source list!
Anyone know what’s going on here and how I can get my expected outcome?
Advertisement
Answer
When you call this:
d = defaultdict(list)
It means that if you attempt to access d['someKey'] and it does not exist, d['someKey'] is initialized by calling list() with no arguments. So you end up with an empty list, which you then append your dictionary to. You probably want this instead:
d = defaultdict(dict)
and then this:
for a, b, c in array:
d[a].update({"num1": b, "num2": c})