Python 将数字列表映射到具有多个值的字典键
我将从一个例子开始。假设我有一本字典,比如:Python 将数字列表映射到具有多个值的字典键,python,Python,我将从一个例子开始。假设我有一本字典,比如: d = {1:['A','B'], 2:['C']} 和一份清单: vals = [1,2] 我想将列表(VAL)中的这些值映射到字典(d)中所有可能的值。因此,这里的输出应该是两个列表,例如: [[ 'A','C']['B','C']] 这基本上就是我现在面临的问题。我想我可以用for循环来实现,但当我们面对这个字典和值列表时,我不能用for循环甚至嵌套循环来实现: d = {1:['A','B','C'] , 2:['D
d = {1:['A','B'],
2:['C']}
和一份清单:
vals = [1,2]
我想将列表(VAL)中的这些值映射到字典(d)中所有可能的值。因此,这里的输出应该是两个列表,例如:
[[ 'A','C']['B','C']]
这基本上就是我现在面临的问题。我想我可以用for循环来实现,但当我们面对这个字典和值列表时,我不能用for循环甚至嵌套循环来实现:
d = {1:['A','B','C'] ,
2:['D','E'],
3:['F','G'],
4:['I'] }
values = [1,2,3,4]
此处的输出应为:
[['A', 'D', 'F', 'I'],
['A', 'D', 'G', 'I'],
['A', 'E', 'F', 'I'],
['A', 'E', 'G', 'I'],
['B', 'D', 'F', 'I'],
['B', 'D', 'G', 'I'],
['B', 'E', 'F', 'I'],
['B', 'E', 'G', 'I'],
['C', 'D', 'F', 'I'],
['C', 'D', 'G', 'I'],
['C', 'E', 'F', 'I'],
['C', 'E', 'G', 'I']]
您可以为此使用product()
。只需理解要包含的索引,并将它们传递给product()
。如果您对元组没意见,这是一个很好的一行:
import itertools
list(itertools.product(*(d[x] for x in values)))
结果:
[('A', 'D', 'F', 'I'),
('A', 'D', 'G', 'I'),
('A', 'E', 'F', 'I'),
('A', 'E', 'G', 'I'),
('B', 'D', 'F', 'I'),
('B', 'D', 'G', 'I'),
('B', 'E', 'F', 'I'),
('B', 'E', 'G', 'I'),
('C', 'D', 'F', 'I'),
('C', 'D', 'G', 'I'),
('C', 'E', 'F', 'I'),
('C', 'E', 'G', 'I')]
您可以为此使用product()
。只需理解要包含的索引,并将它们传递给product()
。如果您对元组没意见,这是一个很好的一行:
import itertools
list(itertools.product(*(d[x] for x in values)))
结果:
[('A', 'D', 'F', 'I'),
('A', 'D', 'G', 'I'),
('A', 'E', 'F', 'I'),
('A', 'E', 'G', 'I'),
('B', 'D', 'F', 'I'),
('B', 'D', 'G', 'I'),
('B', 'E', 'F', 'I'),
('B', 'E', 'G', 'I'),
('C', 'D', 'F', 'I'),
('C', 'D', 'G', 'I'),
('C', 'E', 'F', 'I'),
('C', 'E', 'G', 'I')]
如果您需要简单的工作解决方案,请使用Mark Meyer的解决方案,但是,如果您想知道通过
for
s是否可行,请按照以下方式回答是“是”:
d = {1:['A','B','C'] ,2:['D','E'],3:['F','G'],4:['I']}
for k in sorted(d.keys())[:-1][::-1]:
d[k] = [(i+j) for i in d[k] for j in d[k+1]]
out = [tuple(i) for i in d[1]]
print(out)
给出:
[('A', 'D', 'F', 'I'), ('A', 'D', 'G', 'I'), ('A', 'E', 'F', 'I'), ('A', 'E', 'G', 'I'), ('B', 'D', 'F', 'I'), ('B', 'D', 'G', 'I'), ('B', 'E', 'F', 'I'), ('B', 'E', 'G', 'I'), ('C', 'D', 'F', 'I'), ('C', 'D', 'G', 'I'), ('C', 'E', 'F', 'I'), ('C', 'E', 'G', 'I')]
请注意,此解决方案假定dictd
是正确的,即其键是从1
开始的后续数字,所有值都是一个字母str
s的list
s。现在说明:的外部正在处理从第二大到1
的数字,降序,在这种特殊情况下:3
,2
,1
。列表理解是将k
-th列表与(k+1)
-th列表的SQL交叉连接(如SQL交叉连接
)与(k+1)
-th列表进行“每一次”连接,并且效果存储在当前键k
下。
最后,我检索str
s的list
的d[1]
,并将其转换为符合要求的tuple
s的list
。如果您不清楚此解决方案的工作原理,请复制代码片段,在d[k]=
下面添加print(d)
。。。然后观察它打印的内容。如果您需要简单的工作解决方案,请使用Mark Meyer的解决方案,但是如果您想知道通过for
s是否可行,请按照以下方式回答是肯定的:
d = {1:['A','B','C'] ,2:['D','E'],3:['F','G'],4:['I']}
for k in sorted(d.keys())[:-1][::-1]:
d[k] = [(i+j) for i in d[k] for j in d[k+1]]
out = [tuple(i) for i in d[1]]
print(out)
给出:
[('A', 'D', 'F', 'I'), ('A', 'D', 'G', 'I'), ('A', 'E', 'F', 'I'), ('A', 'E', 'G', 'I'), ('B', 'D', 'F', 'I'), ('B', 'D', 'G', 'I'), ('B', 'E', 'F', 'I'), ('B', 'E', 'G', 'I'), ('C', 'D', 'F', 'I'), ('C', 'D', 'G', 'I'), ('C', 'E', 'F', 'I'), ('C', 'E', 'G', 'I')]
请注意,此解决方案假定dictd
是正确的,即其键是从1
开始的后续数字,所有值都是一个字母str
s的list
s。现在说明:
的外部正在处理从第二大到1
的数字,降序,在这种特殊情况下:3
,2
,1
。列表理解是将k
-th列表与(k+1)
-th列表的SQL交叉连接(如SQL交叉连接
)与(k+1)
-th列表进行“每一次”连接,并且效果存储在当前键k
下。
最后,我检索str
s的list
的d[1]
,并将其转换为符合要求的tuple
s的list
。如果您不清楚此解决方案的工作原理,请复制代码片段,在d[k]=
下面添加print(d)
。。。并观察它打印的内容。那么,您要求的是指定索引的所有组合,对吗?@hawk_uu您可以发布您当前拥有的任何代码以及它输出的内容吗?我们希望看到您在这方面做出一些努力,并尽可能为您指明正确的方向,而不是编写您可能更难理解的新代码。因此,您要求的是指定索引的所有组合,对吗?@hawk_uu您可以发布您当前拥有的任何代码及其输出吗?我们希望看到您在这方面做出一些努力,并尽可能为您指明正确的方向,而不是编写您可能难以遵循的新代码。