在Python中追加关联数组
最近我一直在寻找解决方案,但到现在为止都没有找到。我是从PHP转到Python,现在遇到了一个关于关联数组的区别,我不知道该怎么解决。
看看这一行:
data[user]={i:{'item':row[0],'time':row[1]}}
这显然会覆盖我每个 data[user]
的条目,因为它不是在追加,而是每次都在替换数据。
在PHP中,如果我想在一个循环中追加新的数据,我可以这样做:
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]}
这里的I是我在循环中的迭代器……我觉得这是因为 data[user]
还没有被定义,所以无法操作?我已经创建了 data={}
,但还没有用用户作为键填充它。
在Python中,我是否必须先定义一个键,然后才能定义它的子键?
我尝试了很多 .append()
的选项和其他奇怪的技巧,但我想知道正确的方法是什么。
我可以这样做:
data[user,i]={'item':row[0],'time':row[1]}
但这不是我想要的。
我的正确方法是什么,Python的朋友们?
4 个回答
1
你还可以使用 setdefault() 方法,做一些类似下面的事情:
userData = data.setdefault(user, {})
userData[i] = {'item': row[0], 'time': row[1]}
4
import collections
data = collections.defaultdict(list)
for user,row,time in input:
data[user].append({'row':row, 'time':time})
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
13
像这样的代码应该可以运行。需要注意的是,跟PHP不同,Python有两种不同的基本数据类型来处理数组:一种是数字数组(叫“列表”),另一种是关联数组(叫“字典”或“dict”)。
if user not in data:
data[user] = []
data[user].append({'item': row[0], 'time': row[1]})