将列表列表转换为python

时间:2016-03-18 03:11:28

标签: python list fortran

我操纵了一个数据集,看起来像这样:

# data_dict = { 'epoch':[[int(n), int(m), int(c + cs), int(s + ss)], ...], ... }

其中每个键('epoch')都与列表列表相关联,如下所示:

# [1, 0, (c + cs)_10, (s + ss)_10]
# [2, 0, (c + cs)_20, (s + ss)_20]
# [3, 0, ...]
# [4, 0, ...]
# [5, 0, ...]
# [1, 1, ...]
# [1, 2, ...]
# [1, 3, ...]
# [1, 4, ...]
# [1, 5, ...]
#    .
#    .
#    .
# [5, 5, (c + cs)_55, (s + ss)_55]

我想要的是能够访问(c + cs)_mn 'epoch'的任何值以及mn的值。

我最初的想法是以某种方式将每个列表列表转换为多维列表,因此我可以通过调用data_dict['epoch'][m][n]来查看我想要的值。有可能这样做吗?

更进一步,这样做甚至可行吗?原始数据是FORTRAN格式的,但我对FORTRAN一无所知。因此,我采用了这种(公认的复杂)方法将数据转换为易于阅读的内容。

作为参考,我正在查看的数据here

2 个答案:

答案 0 :(得分:1)

根据您的数据现在的情况,蛮力只是

for item in your_list:
   if item[0] == m and item[1] == m:
       return item[2]

鉴于您现在的数据结构如何,您可以执行以下操作

new_dict = {}
for row in data_dict['epoch']:
    if new_dict.get(row[0]):
        new_dict[row[0]].update({row[1]:row[2]})
    else:
        new_dict[row[0]] = {row[1]:row[2]}
return_data = {'epoch':new_dict}

答案 1 :(得分:0)

d = {}
for v in data_dict['epoch']:
    d.setdefault(v[0], {})[v[1]] = v[2]

或者使用Python的内置defaultdict,您可以轻松获得它

from collections import defaultdict
def tree(): return defaultdict(tree)
d = tree()
for v in data_dict['epoch']: d[v[0]][v[1]] = v[2]

data_dict = {'epoch':d}

您可以致电data_dict['epoch'][m][n]获取价值。