在Python中附加关联数组

时间:2011-03-21 18:50:19

标签: python list dictionary append

我最近一直都在寻找解决方案,到目前为止无济于事。我是从php到python,遇到了一个关联数组差异,我现在不确定要克服。

采取这一行:

data[user]={i:{'item':row[0],'time':row[1]}}

这显然覆盖了我的data[user]个条目,因为它没有附加,它只是每次都替换数据。

在PHP中,如果我想在for循环中追加新的数据,我可以

data[user][i][]=array('item'=>'x','time'=>'y'); // crude example

在python中,我不能这样做:

data[user][]={i:{'item':row[0],'time':row[1]}}

[]

上的barfs

我也做不到:

data[user][i]={'item':row[0],'time':row[1]}

我在循环中是我的迭代器...我认为这是因为data[user]尚未定义,但是,从操作开始?我创建了data={},但我还没有将用户填充为密钥,而是。

在python中,我必须先定义一个键才能定义它,包括一个子键吗?

我尝试了一些.append()选项和其他奇怪的技巧,但我想知道正确的方法。

可以做:

data[user,i]={'item':row[0],'time':row[1]}

但这不是我想要的。

这里有什么方法,python朋友?

4 个答案:

答案 0 :(得分:9)

这样的事情应该有效。请注意,与PHP不同,Python为数值数组(称为“列表”)和关联数组(称为“词典”或“词组”)提供了单独的基本类型。

if user not in data:
    data[user] = []
data[user].append({'item': row[0], 'time': row[1]})

答案 1 :(得分:4)

import collections

data = collections.defaultdict(list)
for user,row,time in input:
    data[user].append({'row':row, 'time':time})

答案 2 :(得分:1)

您也可以使用setdefault()并执行以下操作:

userData = data.setdefault(user, {})
userData[i] = {'item': row[0], 'time': row[1]}

答案 3 :(得分:0)

如果data[user]是一个列表,您可以使用data[user].append({'item':row[0],'time':row[1]})附加到该列表。