python-3.x - 如何一次从 2 个列表的产品中动态创建字典
问题描述
我有大量的迭代(~60000),每次我得到 2 个列表。
我需要保留有关第一个/第二个列表中每个可能的项目组合的一些信息。如果重复了一对,我想数一数-不加,这就是我认为字典更合适的原因。
我可以用嵌套循环来做到这一点 - 但它需要永远。
我想到了使用字典词典。
我可以提前告诉所有可能的值,所以我从一个空值的字典开始——我想迭代地添加它们。
如果这是第一次迭代的输入
l1 = ['1','2']
l2 = ["A", "B"]
我希望得到:
{'1':{'A': [1, 0],
'B': [1, 0]}
'2':{'A': [1, 0],
'B': [1, 0]},
'3': {},
'4': {},
'5': {}}
}
并在第二次迭代后:
l1 = ['1','3','5']
l2 = ['B','C']]
我希望得到:
{'1':{'A': [1, 0],
'B': [2, 0],
'C': [1, 0]}
'2':{'A': [1, 0],
'B': [1, 0]}
'3':{'B': [1, 0],
'C': [1, 0]},
'4':{},
'5':{'B': [1, 0],
'C': [1, 0]}
}
最有效的方法是什么?
解决方案
如果您的列表很大,那么我建议使用链表稀疏矩阵。
尝试这个!
l1_superset = ['1','2','3','4','5']
l2_superset = ['A','B','C','D','E']
M=sparse.lil_matrix(np.zeros((len(l1_superset),len(l2_superset))))
mapper_l1 = {k:idx for idx,k in enumerate(l1_superset)}
mapper_l2 = {k:idx for idx,k in enumerate(l2_superset)}
def update (l1,l2):
for i in l1:
for j in l2:
M[mapper_l1[i],mapper_l2[j]] = M[mapper_l1[i],mapper_l2[j]] + 1
l1 = ['1','2']
l2 = ["A", "B"]
update(l1,l2)
l1 = ['1','3','5']
l2 = ['B','C']
update(l1,l2)
推荐阅读
- deep-learning - 我可以使用 VAE 进行降维吗?
- sql - Django 模型:使用唯一外键从表中获取结果
- c# - C#WPF如何在由数据模板中的对象列表组成的列表框中设置项目
- javascript - 使用 javascript 创建产品表和计数器
- sql - Superset 我没有“参数”按钮
- python - 从 DataFrame 在 Bokeh 中创建嵌套条形图
- openmodelica - 在 OMEdit 中使用 CombiTable1D 时出现编译错误
- ruby-on-rails - 如何匹配 2 个数组并在新数组 Ruby 中获得输出
- next.js - Nextjs 获取元标记的 url
- html - 如何将表格中的项目居中对齐