use*_*121 27 python dictionary list
我有一个如下所示的数据列表:
// timestep,x_position,y_position
0,4,7
0,2,7
0,9,5
0,6,7
1,2,5
1,4,7
1,9,0
1,6,8
......我希望看起来像这样:
0, (4,7), (2,7), (9,5), (6,7)
1, (2,5), (4,7), (9,0), (6.8)
我的计划是使用字典,其中t的值是字典的键,而键的值是列表.然后我可以将每个(x,y)附加到列表中.就像是:
# where t = 0, c = (4,7), d = {}
# code 1
d[t].append(c)
现在这会导致IDLE失败.但是,如果我这样做:
# code 2
d[t] = []
d[t].append(c)
......这很有效.
所以问题是:为什么代码2工作,但代码1不工作?
PS我计划做的任何改进都会引起极大的兴趣!我想我必须通过输入检查每个循环上的字典,看看字典键是否已经存在,我想通过使用像max(d.keys())这样的东西:如果它在那里,附加数据,如果没有创建将空列表作为字典值,然后在下一个循环中追加数据.
S.L*_*ott 72
我们来看看吧
d[t].append(c)
有什么价值d[t]?试试吧.
d = {}
t = 0
d[t]
你得到了什么?哦.没有什么d是关键的t.
现在尝试一下.
d[t] = []
d[t]
啊.现在有一些d关键的东西t.
你可以做几件事.
setdefault.  d.setdefault(t,[]).append(c).defaultdict(list)是一个简单的字典,而不是一个简单的字典{}.编辑1.优化
给定来自上述形式的文件的输入行:ts,x,y,分组过程是不必要的.没有理由从简单的(ts,x,y)列表到更复杂的(ts,(x,y),(x,y),(x,y),...)列表.原始列表可以在到达时完全处理.
d= collections.defaultdict(list)
for ts, x, y in someFileOrListOrQueryOrWhatever:
    d[ts].append( (x,y) )
编辑2.回答问题
"在初始化字典时,你需要告诉字典键值数据结构是什么样的?"
我不确定这个问题意味着什么.因为,所有词典都是键值结构,所以问题不是很清楚.所以,我将回顾三个可能回答这个问题的方案.
例2.
初始化
d= {}
使用
if t not in d:
    d[t] = list()
d[t].append( c )
每个字典值必须初始化为一些有用的结构.在这种情况下,我们检查密钥是否存在; 当密钥丢失时,我们创建密钥并分配一个空列表.
默认设置
初始化
d= {}
使用
d.setdefault(t,list()).append( c )
在这种情况下,我们利用该setdefault方法获取与密钥关联的值或创建与缺失密钥关联的新值.
默认字典
初始化
import collections
d = collections.defaultdict(list)
使用
d[t].append( c )
在defaultdict使用了丢失的钥匙的初始化函数.在这种情况下,我们提供该list功能,以便为缺失的密钥创建一个新的空列表.
Tim*_*ker 12
我想你想使用setdefault.使用它有点奇怪,但完全符合您的需要.
d.setdefault(t, []).append(c)
如果该键存在.setdefault,该方法将返回绑定到dict键的元素(在我们的示例中为列表)t.如果没有,它会将空列表绑定到键t并返回它.所以无论哪种方式,都会有一个列表,.append然后该方法可以将元组附加c到.
| 归档时间: | 
 | 
| 查看次数: | 91845 次 | 
| 最近记录: |