-1

有表想使用 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:1as k。想要一切'212:3:0:70.13911:-89.85361:3','212:3:1:70.28725:-89.77466:7'如v

成字典任何字典(k,v)。我不想使用 for 循环来做到这一点......我已经这样做了,因为 for 循环很慢。

注意:该行有“:”,但“:”确实表示字典“:”。

4

2 回答 2

2

dict理解的基础

要将某些内容转换为 dict,您需要将其转换为生成 2 序列(生成两个元素序列的任何内容)的可迭代对象,例如[[1,2],[3,4]]or[(1,2),(3,4)]zip([1,2,3,4], [5,6,7,8])

例如

>>> mylst = [(1,2), (3,4), (5,6)]
>>> print dict(mylst)
{1:2, 3:4, 5:6}

因此,您需要以生成元组的方式拆分每个字符串。假设您已经编写了一个执行此操作的函数,调用 split_item它接受两个字符串并返回一个元组。然后,您可以编写如下所示的生成器表达式,这样您就不需要在创建 dict 之前将所有内容加载到内存中。

def generate_tuples(table):
    length = len(table)
    for i in range(1, length - 1):
        yield split_item(table[i-1], table[i])

然后只需调用dict生成器函数上的内置函数。

>>> dict(generate_tuples(table))

既然你说你已经用 for 循环写了这个,我猜你已经split_items写了一个函数。

让它快速

这是Ian Ozsvald 编写的高性能 Python指南,它可以帮助您尝试其他方法来提高处理速度。(感谢@AndrewWalker在此处的 SO 帖子

于 2012-06-19T20:42:58.250 回答
1

这就是你所追求的吗?

dict( (t.rsplit(':', 3)[0], t) for t in table ) )
于 2012-06-19T20:51:11.627 回答