首页 > 解决方案 > 将矩阵的列附加到不同的字典元素

问题描述

在前面的评论之后,我只包括理解问题所需的代码。我希望这是可以理解的。这是代码:

list_dict = [[] for i in range(10)]
out_dict_2 = {}
out_dict_2.update({'key_a': list_dict, 'key_b': list_dict, 'key_c': list_dict})

for index in range(10):
    for line in list_2:
        line = line.strip()
        line = line.split()
        if areallnumbers(line): # check whether all the elements in the list are float
            out_dict_2['key_a'][index].append(line[0])
            out_dict_2['key_b'][index].append(line[1])
            out_dict_2['key_c'][index].append(line[2])

其中 list_2 看起来像编辑:(我还可以有更多相同类型的列表,在我的情况下它们是 10--> for index in range(10):):

['5.00', '-4601.24', '31.73']
['11.04', '-4517.66', '32.51']
['17.08', '-4418.59', '33.24']
['23.12', '-4305.34', '33.93']
['29.17', '-4179.09', '34.59']
......

我试图将每个列表的第一列附加到一个字典元素,即第一列到 out_dict_2[key_a][index] 等等,所以每个值都是 10 个列表的列表。像这样的东西(假设 10 个列表都等于我给出的示例列表:

key_a [['5.00'    , '11.04'   , '17.08'   , '23.12'   , ...],...,['5.00'    , '11.04'   , '17.08'   , '23.12'   , ...]]
key_b [['-4601.24', '-4517.66', '-4418.59', '-4418.59', ...],...,['5.00'    , '11.04'   , '17.08'   , '23.12'   , ...]]
key_c [['31.73'   , '32.51'   , '33.24'   , '33.93'   , ...],...,['5.00'    , '11.04'   , '17.08'   , '23.12'   , ...]]

我实际得到的是:

key_a [['5.00', '-4601.24', '31.73'...]['5.00', '-4601.24', '31.73'...]...['5.00', '-4601.24', '31.73'...]
key_b [['5.00', '-4601.24', '31.73'...]['5.00', '-4601.24', '31.73'...]...['5.00', '-4601.24', '31.73'...]
key_c [['5.00', '-4601.24', '31.73'...]['5.00', '-4601.24', '31.73'...]...['5.00', '-4601.24', '31.73'...]

好像每一行都附加到每个字典键上,为什么?

标签: pythonlistdictionary

解决方案


我不确定 list_2 应该是什么。如果 list_2 应该是列表列表,请尝试:

for index in range(10):
   for line in list_2:
       print("index={0}, line = {1}".format(index, line))  #insert this line
   ...

我仍然不确定 list_2 是什么。以下内容可能会给你你想要的。如果您可以打印 list_2 定义,它将有所帮助:

list_2 = [['5.00', '-4601.24', '31.73'],
        ['11.04', '-4517.66', '32.51'],
        ['17.08', '-4418.59', '33.24'],
        ['23.12', '-4305.34', '33.93'],
        ['29.17', '-4179.09', '34.59']]

out_dict_2 = {'key_a': [[] for i in range(10)], 
              'key_b': [[] for i in range(10)],
              'key_c': [[] for i in range(10)]}

display(out_dict_2)

for lnum, line in enumerate(list_2):
    all_numeric = True
    row = []
    for item in line:
        try:
            row.append(float(item))
        except:
            print("skipped line: all values are not numeric:  {0}".format(line))
            all_numeric = False
    if all_numeric:
        out_dict_2['key_a'][lnum].append(row[0])
        out_dict_2['key_b'][lnum].append(row[1])
        out_dict_2['key_c'][lnum].append(row[2])
            
display(out_dict_2)

推荐阅读