如何在字典中交换值并找到所有可能的结果?

时间:2019-02-01 12:18:18

标签: python python-2.7 dictionary

我有以下字典:

tmp.flush()

是否可以仅基于交换值查找和打印此词典的所有迭代?

例如

d = {
     'A': 50, 
     'B': 30, 
     'C': 20
      }

值是唯一的,只要找到所有可能的迭代,交换值的顺序就无关紧要。

5 个答案:

答案 0 :(得分:3)

我们可以使用stdlib中的itertools library获得可能的排列

>>> from itertools import permutations
>>> d = {
     'A': 50, 
     'B': 30, 
     'C': 20
      }
>>> [dict(zip(d.keys(), values)) for values in permutations(d.values())]
[{'A': 50, 'B': 30, 'C': 20},
 {'A': 20, 'B': 30, 'C': 50},
 {'A': 30, 'B': 50, 'C': 20},
 {'A': 20, 'B': 50, 'C': 30},
 {'A': 30, 'B': 20, 'C': 50},
 {'A': 50, 'B': 20, 'C': 30}]

答案 1 :(得分:1)

使用itertools.permutations

from itertools import permutations

d = {
     'A': 50, 
     'B': 30, 
     'C': 20
      }

vals = d.values()    
for x in permutations(vals, len(vals)):
    x = iter(x)
    print({k: next(x) for k in d})

# {'A': 50, 'B': 30, 'C': 20}
# {'A': 50, 'B': 20, 'C': 30}                                  
# {'A': 30, 'B': 50, 'C': 20}                                 
# {'A': 30, 'B': 20, 'C': 50}                                
# {'A': 20, 'B': 50, 'C': 30}                               
# {'A': 20, 'B': 30, 'C': 50}

答案 2 :(得分:1)

您可以在itertools中使用置换:

import itertools
[dict(zip(d.keys(), l)) for l in itertools.permutations(d.values())]

答案 3 :(得分:1)

我不知道有任何直接方法可以执行此操作,但是您可以对键本身进行排列(即“ abc”,“ acb”,“ bac”,“ bca”等),然后使用该键来获取排列到您的集合的值。

例如,排列密钥集为'bca': 键“ a”获取原始词典“ b”的内容。 键“ b”获取原始词典“ c”的内容。 键“ c”获取原始词典“ a”的内容。

,我将从这个问题中得到置换的键集: Finding all possible permutations of a given string in python

答案 4 :(得分:1)

如果你让一组具有键和值可以使用itertools模块里,所述组合()函数。从结果中,仅用键消除配对。

以下是详细信息:https://docs.python.org/2/library/itertools.html#itertools.combinations