【发布时间】:2021-12-01 10:56:18
【问题描述】:
我有 5 个属性要在几千条记录中进行比较,以便将记录群拆分为属性与特定组合匹配的离散记录集。
当与包含相同属性的现有数据集进行比较时,每个属性都可以采用三个值之一,即。 =、> 或
本质上,组合的数量包括我使用 itertools.product 生成的笛卡尔积,代码如下:sn-p:
from itertools import product
tc = ("=", ">", "<")
dr = ("=", ">", "<")
bd = ("=", ">", "<")
fr = ("=", ">", "<")
ch = ("=", ">", "<")
permutations = list(product(tc, dr, bd, fr, ch))
结果列表采用以下形式:
('=', '=', '=', '=', '=')
('=', '=', '=', '=', '>')
('=', '=', '=', '=', '<')
('=', '=', '=', '>', '=')
...
我之前编写了一个 Python 脚本来动态生成所需的 SQL 查询,运行它们并将结果写入文本文件 (CSV)
代码依赖于遍历一个包含字典的列表,该字典当时定义如下(显然这种方法在引入更多属性时不可行。):
permutations = []
permutations.append({'tc': "=", 'dr': "=", 'bd': "=", 'fr': "="})
permutations.append({'tc': ">", 'dr': "=", 'bd': "=", 'fr': "="})
permutations.append({'tc': "<", 'dr': "=", 'bd': "=", 'fr': "="})
permutations.append({'tc': "=", 'dr': ">", 'bd': "=", 'fr': "="})
permutations.append({'tc': ">", 'dr': ">", 'bd': "=", 'fr': "="})
然后我会在每次迭代中使用各自的 'tc'、'dr'、'bd' 和 'fr' 值动态地遍历列表,然后生成 SQL 查询 sn-p:
for permutation in permutations:
tc = permutation.get('tc')
dr = permutation.get('dr')
bd = permutation.get('bd')
fr = permutation.get('fr')
criteria = (f"a.f1 {tc} b.f1 AND "
f"a.f2 {dr} b.f2 AND "
f"a.f3 {bd} b.f3 AND "
f"a.f4 {fr} b.f4")
问题:将 itertools.product 生成的列表转换为我的代码一直在利用的嵌入字典的等效列表的最有效方法是什么 - 还是修改我的代码以直接引用列表的元素会更好?
【问题讨论】:
-
那么最后你想要的是列表“排列”吗?
-
for tc, dr, bd, fr, ch in permutations:? -
感谢@IainShelvington,它成功了。
标签: python list dictionary tuples