字典:如果列表中有字符串,则将列表名称分配给字典
Dictionary: assign name of list to dictionary if string in list
设置
我有以下组列表列表,
lofl=[A,B,...,N]
其中每个组包含子组,
A=['A1','A2','A3',...,An]
B=['B1','B2','B3',...,Bn]
# ⋮ ⋮
N=['N1','N2','N3',...,Nn]
终于,我有了一本字典data
。
意向
我想检查是否子组 An
在 lofl
中,如果是这样,我想将其字符串名称 'A'
分配给 data['group']
并将 An
分配给 data['subgroup']
.
注意:在我的实际数据集中,A,B,...,N
和An,Bn,...,Nn
都是没有数字的名字。
当前代码
if x in lofl:
if x in A:
data['group']='A'
data['subgroup']=x
elif x in B:
data['group']='B'
data['subgroup']=x
# ⋮
elif x in N:
data['group']='N'
data['subgroup']=x
else:
data['group']='unknown'
data['subgroup']=x
问题
代码有点长。此外,我想在组名不同的不同数据集上重用代码。我想避免必须为每个数据集替换代码中的名称。有什么建议吗?
避免使用一长串指向同一类型数据的变量名。改用字典:
subgroups = {
'A': ['A1','A2','A3',...,An]
'B': ['B1','B2','B3',...,Bn],
# ⋮ ⋮
'N': ['N1','N2','N3',...,Nn],
}
现在您可以用循环替换单独的 if..elif..else
树:
if x in lofl:
data['subgroup'] = x
for name, subgroup in subgroups.items():
if x in subgroup:
data['group'] = name
break
else:
data['group'] = 'unknown'
您可能要考虑创建索引;遍历所有这些列表并测试每个列表是 昂贵的 (例如,每个 in
测试必须遍历整个列表)。考虑使用集合而不是列表(测试集合成员资格需要 O(1) 常数时间而不是 O(N) 线性时间) and/or 一个索引(就像字典将 subgroups
列表中的值映射到它们所属的键,所以你所要做的就是使用 index.get(x, 'unknown')
而不是循环)。
设置
我有以下组列表列表,
lofl=[A,B,...,N]
其中每个组包含子组,
A=['A1','A2','A3',...,An]
B=['B1','B2','B3',...,Bn]
# ⋮ ⋮
N=['N1','N2','N3',...,Nn]
终于,我有了一本字典data
。
意向
我想检查是否子组 An
在 lofl
中,如果是这样,我想将其字符串名称 'A'
分配给 data['group']
并将 An
分配给 data['subgroup']
.
注意:在我的实际数据集中,A,B,...,N
和An,Bn,...,Nn
都是没有数字的名字。
当前代码
if x in lofl:
if x in A:
data['group']='A'
data['subgroup']=x
elif x in B:
data['group']='B'
data['subgroup']=x
# ⋮
elif x in N:
data['group']='N'
data['subgroup']=x
else:
data['group']='unknown'
data['subgroup']=x
问题
代码有点长。此外,我想在组名不同的不同数据集上重用代码。我想避免必须为每个数据集替换代码中的名称。有什么建议吗?
避免使用一长串指向同一类型数据的变量名。改用字典:
subgroups = {
'A': ['A1','A2','A3',...,An]
'B': ['B1','B2','B3',...,Bn],
# ⋮ ⋮
'N': ['N1','N2','N3',...,Nn],
}
现在您可以用循环替换单独的 if..elif..else
树:
if x in lofl:
data['subgroup'] = x
for name, subgroup in subgroups.items():
if x in subgroup:
data['group'] = name
break
else:
data['group'] = 'unknown'
您可能要考虑创建索引;遍历所有这些列表并测试每个列表是 昂贵的 (例如,每个 in
测试必须遍历整个列表)。考虑使用集合而不是列表(测试集合成员资格需要 O(1) 常数时间而不是 O(N) 线性时间) and/or 一个索引(就像字典将 subgroups
列表中的值映射到它们所属的键,所以你所要做的就是使用 index.get(x, 'unknown')
而不是循环)。