python - 从文本文件创建字典 Python Numpy

标签 python numpy dictionary text-files

我有一个如下所示的文本文件:

# Comments 
PARAMETER  0  0
      1045        54
      1705         0                           time 1
         1        10       100   0.000e+00   9999   A
         2        20       200   0.2717072   9999   B
         3        30       300   0.0282928   9999   C
         1       174        92   2999.4514   9999   APEW-1
         2       174        92   54.952499   9999   ART-3A
         1       174        97   5352.1299   9999   APEW-2
         1       173       128   40.455467   9999   APEW-3
         2       173       128   1291.1320   9999   APEW-3
         3       173       128   86.562599   9999   ART-7B
...

我想创建一个如下所示的字典(基本上跳过标题和某些列并转到我需要的数据):

my_dict = {'A':(1,10,100),'B':(2,20,200), 'C':(3,30,300), 'APEW-1':(1,174,92), ...}

这些数据点是观测点,它们各自的值为深度、y、x。因此,一个观察点可以具有不同深度的多个值(第一列)。我试图通过添加重复的后缀来避免重命名标签。我想知道是否有什么办法可以解决它。我想要用它们做的是调用观察点名称并提取坐标。我不确定字典是否是实现此目的的正确工具。 它是一个小数据集,不需要很快。我正在使用 Numpy、Python 2.7。

最佳答案

loadtxt 可以做到:

>>> dtype=np.rec.fromrecords([[0, 0, 0, b'APEW-1']]).dtype
>>> x = np.loadtxt(fn, skiprows=4, usecols=(0,1,2,5), dtype=dtype)
>>>
>>> result = {}
>>> for x0, x1, x2, key in x:
...     try:
...         result[key.decode()].append((x0,x1,x2))
...     except KeyError:
...         result[key.decode()] = [(x0,x1,x2)]
... 
>>> result
{'A': [(1, 10, 100)], 'B': [(2, 20, 200)], 'C': [(3, 30, 300)], 'APEW-1': [(1, 174, 92)], 'ART-3A': [(2, 174, 92)], 'APEW-2': [(1, 174, 97)], 'APEW-3': [(1, 173, 128), (2, 173, 128)], 'ART-7B': [(3, 173, 128)]}

注释:

  • 我们滥用rec.fromrecords来创建描述列的复合数据类型,请务必使用您期望的最长模板字符串

    • 可能有一种创建复合dtypes的官方方法,它不涉及创建一次性数组,但这很简单并且有效
  • loadtxt 参数是不言自明的,因为复合数据类型会生成一维记录数组
  • 如果没有重复的键,我们可以使用字典理解将记录数组转换为字典f0-f3是自动生成的字段名称

    • 为了容纳重复项,我们将元组值打包在列表中
    • 大多数列表只包含一个元组,但有些列表会包含更多元组

py2版本:主要区别不需要使用字节字符串/解码,字典忘记项目的顺序

>> dtype=np.rec.fromrecords([[0, 0, 0, 'APEW-1']]).dtype
>>> x = np.loadtxt(fn, skiprows=4, usecols=(0,1,2,5), dtype=dtype)
>>>
>>> result = {}
>>> for x0, x1, x2, key in x:
...     try:
...         result[key].append((x0,x1,x2))
...     except KeyError:
...         result[key] = [(x0,x1,x2)]
... 
>>> result
{'A': [(1, 10, 100)], 'B': [(2, 20, 200)], 'C': [(3, 30, 300)], 'APEW-1': [(1, 174, 92)], 'ART-3A': [(2, 174, 92)], 'APEW-2': [(1, 174, 97)], 'APEW-3': [(1, 173, 128), (2, 173, 128)], 'ART-7B': [(3, 173, 128)]}

关于python - 从文本文件创建字典 Python Numpy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42310554/

相关文章:

python - 将包含多维 numpy 数组和一维列表的元组存储到 HDF5

python - 如何使用 Nuitka 从 Python 获取已编译二进制文件的当前路径?

python - 将嵌套字典折叠到 python 中的字典列表中

python - Pandas DataFrame 和 numpy 标准差不同

python - 如何读取字典树

python - 从 Pandas Series/Dataframe 中减去聚合

python - flask-apispec 不使用 GET 查询中的值填充 kwargs(文档中示例代码的实现)

python - Numpy 索引 : Return the rest

Python - 从 numpy 表创建字典以显示列表

java - 映射 Avro 模型