动态创建一个列表,并将所有与当前值匹配的值存储在 python 3.x

Create a list dynamically and store all the values matching with current value in python 3.x

我有一个文本文件,其中包含像

这样动态创建的数据
1000L 00V
2000L -10V
3500L -15V
1250L -05V
1000L -05V
2000L -05V
6000L -10V
1010L 00V

等等...

V 之前的数字可能不同于 -160 to +160

我想动态创建一个列表(不使用字典)并根据V

之前的匹配数字将值存储在列表中

在这种情况下,我想创建如下列表集

 00 = ["1000", "1010"]
-10 = ["2000", "6000"]
-15 = ["3500"]
-05 = ["1250", "1000", "2000"]

尝试过的代码:

if name.split()[1] != "":
    gain_value = name.split()[1]
    gain_value = int(gain_value.replace("V", ""))
    if gain_value not in gain_list:
        gain_list.append(gain_value)
        gain_length = len(gain_list)
        print(gain_length)
        g['gain_{0}'.format(gain_length)] = []
        'gain_{0}'.format(gain_length).append(L_value)
    else:
        index_value = gain_list.index(gain_value)
        g[index_value].append(L_value)

for x in range(0, len(gain_list)):
    print(str(gain_list[x]) + "=" + 'gain_{0}'.format(x))

但是上面的代码不起作用,因为我在附加 'gain_{0}'.format(gain_length).append(L_value) 时遇到错误,而且我不确定如何在创建列表后动态打印列表,如我所需的输出中所述。

我不能为上述方法使用字典,因为我想动态地给出列表作为 pygal 模块 的输入,如下所示:

因为我需要 pygal 模块的输出作为输入,例如:

for x in range(0, gain_length):
    bar_chart.x_labels = k_list
    bar_chart.add(str(gain_length[x]),'gain_{0}'.format(x))

这里我只能从列表而不是字典中添加值

你可以使用 collections.defaultdict:

import collections
my_dict = collection.defaultdict(list)
with open('your_file') as f:
    for x in f:
        x = x.strip().split()
        my_dict[x[1][:-1]].append(x[0])

输出:

defaultdict(<type 'list'>, { '00': ["1000", "1010"],
'-10':["2000", "6000"],
'-15': ["3500"],
'-05': ["1250", "1000", "2000"]})

对于您想要的输出:

for x,y in my_dict.items():
    print "{} = {}".format(x,y)