我最近一直都在寻找解决方案,到目前为止无济于事。我是从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]}}
我[]
我也做不到:
data[user][i]={'item':row[0],'time':row[1]}
我在循环中是我的迭代器...我认为这是因为data[user]
尚未定义,但是,从操作开始?我创建了data={}
,但我还没有将用户填充为密钥,而是。
在python中,我必须先定义一个键才能定义它,包括一个子键吗?
我尝试了一些.append()
选项和其他奇怪的技巧,但我想知道正确的方法。
我可以做:
data[user,i]={'item':row[0],'time':row[1]}
但这不是我想要的。
这里有什么方法,python朋友?
答案 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]})
附加到该列表。