繁体   English   中英

使用带循环的元组键创建字典

[英]Creating dictionary with tuple keys with a loop

我正在尝试创建一个以元组为键的字典。

例如,如果我的范围是(0,3),我想创建一个包含每个组合映射的字典。 例如{(0,0):1, (0,1):2, (0,2):1 ...} ,其中值是元组中不存在的int。

如果范围是(0,4),字典看起来像这样:

{(0,1,2):3, (0,0,0):1, (0,0,1):2...}

唯一的规则是密钥必须是一个未包含在元组中并且在给定范围内的值。

希望这是有道理的。 我一直试图弄清楚如何在python中编写代码来做到这一点,但我不知道该如何解决这个问题。

编辑完整示例:范围:(0,3)

Dict创建:

{(0,0):1, (0,1):2, (0,2):1, (1,0):2, (1,1):2, (1,2): 0, (2,0): 1, (2,1):0, (2:2):1} 

是的,对于某些组合,例如(1,1),存在多个可能的值。 它可以是(1,1): 0(1,1): 2 我只需要一个。

使用itertools.product您可以创建所有键。 然后你只需要找到一个在你的范围内但不在密钥中的值,这可以使用set.difference来解决:

>>> import itertools

>>> the_range = range(0, 3)
>>> possible = set(the_range)

>>> {key: possible.difference(key).pop() for key in itertools.product(the_range, repeat=len(the_range)-1)}
{(0, 1): 2, (1, 2): 0, (0, 0): 1, (2, 0): 1, (1, 0): 2, (2, 2): 0, (0, 2): 1, (2, 1): 0, (1, 1): 0}

它应该工作,只要你不期望差异的特定值。 集合是无序的,因此set.pop方法将始终从“剩余”值中提供“随机”值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM