在 Python 中附加关联数组
Posted
技术标签:
【中文标题】在 Python 中附加关联数组【英文标题】:Appending associative arrays in Python 【发布时间】:2011-07-19 22:12:47 【问题描述】:我最近一直在寻找解决方案,但到目前为止无济于事。我从 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 朋友,我这里的正确方法是什么?
【问题讨论】:
好吧,看来我并没有我希望的那么清楚。问题不在于添加 data[user]=stuff。问题是添加 data[user][i]=stuff 【参考方案1】:如果data[user]
是一个列表,您可以使用data[user].append('item':row[0],'time':row[1])
附加到它。
【讨论】:
【参考方案2】:import collections
data = collections.defaultdict(list)
for user,row,time in input:
data[user].append('row':row, 'time':time)
【讨论】:
defaultdict
是您可以使用的方法。我没有使用它,因为 OP 可能处于无法使用的情况(例如,如果 data
由其他库模块提供)
@Zack 您可以将 defaultdict 与任何类一起使用,只要它可以使用 0 个参数进行实例化,即使没有,您也可以使用 functools.partial 预先提供实例化参数。愚蠢的例子:defaultdict(partial(raw_input, "initial_string? "))
@lazyr 我想你误解了 - 想象 存储在变量 data
中的对象的构造不受 OP 的控制,所以他们被卡住了无论它有什么类型。例如,如果data = shelve.open(...)
怎么办?【参考方案3】:
这样的事情应该可以工作。请注意,与 PHP 不同,Python 为数值数组(称为“列表”)和关联数组(称为“字典”或“字典”)提供了不同的原始类型。
if user not in data:
data[user] = []
data[user].append('item': row[0], 'time': row[1])
【讨论】:
这就是我要找的。 .append() 除了不要将列表称为“数组”,因为还有array.array
。
@Wooble 好点,已更正。我还不需要那个,所以我忘记了它的存在。【参考方案4】:
您也可以使用setdefault() 并执行以下操作:
userData = data.setdefault(user, )
userData[i] = 'item': row[0], 'time': row[1]
【讨论】:
也很有趣。谢谢你。 =D以上是关于在 Python 中附加关联数组的主要内容,如果未能解决你的问题,请参考以下文章