让表想要使用numpy切片到
table = ['212:3:0:70.13911:-89.85361:3', '212:3:1:70.28725:-89.77466:7', '212:3:2:70.39231:-89.74908:9', '212:3:3:70.48806:-89.6414:11', '212:3:4:70.60366:-89.51539:14', '212:3:5:70.60366:-89.51539:14', '212:3:6:70.66518:-89.4048:16']
t = np.asarray (table, dtype ='object')
想要使用numpy将所有........ 212:3:0, 212:3:1
切成k。
希望所有'212:3:0:70.13911:-89.85361:3','212:3:1:70.28725:-89.77466:7'
为v
进入dictionany dict(k,v)。我不想使用for循环来做这个... 我做了这个,因为它的循环很慢。
注意:行有“:”,但“:”表示dict':'。
答案 0 :(得分:2)
要将某些内容转换为dict,您需要将其转换为可生成2个序列的迭代(生成两个元素序列的任何内容),例如[[1,2],[3,4]]
或[(1,2),(3,4)]
或{{1 }})
E.g。
zip([1,2,3,4], [5,6,7,8])
因此您需要以生成a的方式拆分每个字符串
元组。说你已经写了一个这样做的功能,叫做
>>> mylst = [(1,2), (3,4), (5,6)]
>>> print dict(mylst)
{1:2, 3:4, 5:6}
,它接受两个字符串并返回一个元组。那你可以
编写如下所示的生成器表达式,以便您不需要加载
在您创建字典之前,所有内容都将进入内存。
split_item
然后只需在生成器函数上调用def generate_tuples(table):
length = len(table)
for i in range(1, length - 1):
yield split_item(table[i-1], table[i])
内置函数。
dict
既然你说你已经用for循环写了这个,我猜你已经写了>>> dict(generate_tuples(table))
函数了。
以下是Ian Ozsvald撰写的high-performance Python指南,可以帮助您尝试其他方法来提高处理速度。 (归功于@AndrewWalker的SO post here)
答案 1 :(得分:1)
这就是你要追求的吗?
dict( (t.rsplit(':', 3)[0], t) for t in table ) )