如何使用Python按值对列表进行分组并放入新的动态变量



如何使用Python按值对列表进行分组并放入新的动态变量。我有一些这样的数据列表,我想基于值K93、K94、K0JA=>(这将是一个动态值(

data_list = [
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K94', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K0JA', 'AMK0JA  ', 0.0, 700.0, 400), [600, 30]),
(('K0JA', 'AMK0JA  ', 0.0, 700.0, 400), [300, 15]),
(('K93', 'AMK2FJNBK', 0.0, 800.0, 400), [300.0, 15]),
(('K94', 'AMK2FJNBK', 0.0, 800.0, 400), [300.0, 15])]

我想要这样的结果:

list_K93 = [
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJNBK', 0.0, 800.0, 400), [300.0, 15]),
]
list_K94 = [
(('K94', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K94', 'AMK2FJNBK', 0.0, 800.0, 400), [300.0, 15])
]
list_K0JA = [
(('K0JA', 'AMK0JA  ', 0.0, 700.0, 400), [600, 30]),
(('K0JA', 'AMK0JA  ', 0.0, 700.0, 400), [300, 15])
]

您应该创建一个具有所需键的dict,而不是动态命名的变量,这可以通过用列表初始化输出dict的每个新键并将每个元组条目附加到列表来完成:

data_dict = {}
for t in data_list:
data_dict.setdefault(t[0][0], []).append(t)

data_dict变为:

{
'K93': [(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJNBK', 0.0, 800.0, 400), [300.0, 15])],
'K94': [(('K94', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K94', 'AMK2FJNBK', 0.0, 800.0, 400), [300.0, 15])],
'K0JA': [(('K0JA', 'AMK0JA  ', 0.0, 700.0, 400), [600, 30]),
(('K0JA', 'AMK0JA  ', 0.0, 700.0, 400), [300, 15])]
}

您可以创建类似的动态变量

i = "test"
globals()[f"dynamic_variable_{i}"] = i
print(dynamic_variable_test)

这是代码

data_list = [
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),]

def create_dynamic_var(name,value):
globals()[f"list_{name}"] = []
globals()[f"list_{name}"].append(value)

for elem in data_list:
print(elem[0][0])
create_dynamic_var(elem[0][0],elem)

print(list_K93)

您可以通过如下字典对数据进行聚类:

result = {}
for i in data_list:
if i[0][0] in result:
result[i[0][0]].append(i)
else:
result[i[0][0]] = []
result[i[0][0]].append(i)

因此,结果将是这样的字典:

{'K93': [(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJVGB', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K93', 'AMK2FJNBK', 0.0, 800.0, 400), [300.0, 15])],
'K94': [(('K94', 'AMK2FJSRM', 0.0, 600.0, 300), [300, 15]),
(('K94', 'AMK2FJNBK', 0.0, 800.0, 400), [300.0, 15])],
'K0JA': [(('K0JA', 'AMK0JA  ', 0.0, 700.0, 400), [600, 30]),
(('K0JA', 'AMK0JA  ', 0.0, 700.0, 400), [300, 15])]}

最新更新