我想在Python中创建一个字典,其密钥将独立于它包含的元素的顺序。这是一个例子:
items = {1: 2, 2: 3, 4: 5}
comb = {(key1, key2): 0 for key2 in items.keys() for key1 in items.keys() if key1 != key2}
输出:
{(1, 2): 0, (1, 4): 0, (2, 1): 0, (4, 2): 0, (4, 1): 0, (2, 4): 0}
但我只想:
{(1, 2): 0, (1, 4): 0, (2, 4): 0}
所以键(1,2)应该等于(2,1)。对于长度大于2的元组(例如(2,3,4)=(4,3,2)),这也需要成立。
答案 0 :(得分:4)
>>> {keys: 0 for keys in itertools.combinations(items, 2)}
{(1, 2): 0, (2, 4): 0, (1, 4): 0}
带有dict.fromkeys
的(当值不可变时,仅使用dict.fromkeys
;所有条目共享该值):
>>> dict.fromkeys(itertools.combinations(items, 2), 0)
{(1, 2): 0, (2, 4): 0, (1, 4): 0}
>>> dict.fromkeys(itertools.combinations(items, 3), 0)
{(1, 2, 4): 0}
答案 1 :(得分:0)
如果您希望在一般情况下使用与订单无关的密钥,则可以使用frozensets作为密钥而不是元组:
RewriteRule ^/motivational/api\.php$ /api.php?latest=&%{QUERY_STRING}
对于OP的具体情况,前面提到的解决方案会更好。但是,如果需要真正与订单无关的密钥,我提出的解决方案可能是一种比分类索引更优雅(更快)的方法。