如何从字典中交换两个随机值?

时间:2017-12-02 17:13:29

标签: python dictionary

我需要交换来自dicitonary的两个随机值

def alphabetcreator():
        letters = random.sample(range(97,123), 26)
        newalpha = []
        engalpha =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
        alphasmerged = {}
        for i in letters:
            newalpha.append(chr(i))
        alphasmerged = dict(zip(engalpha, newalpha))
        return(alphabetsmerged)

这段代码给了我两个不同的字母表,将它们放入字典中,以便我可以在一个字典之间进行翻译。我现在需要随机交换两个值,同时保持所有其余值相同。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

您可以先使用random.sample从集合中随机选择两个不同的值。 来自doc:

  

返回从总体序列或集合中选择的k个长度的唯一元素列表。用于无需替换的随机抽样。

在词典的键上使用此功能可以有两个不同的键。 在Python 3中,您可以直接在dict_keys对象上使用它。 在Python 2中,您可以将d.keys()转换为list,也可以直接将字典传递给sample

>>> import random
>>> d = {'a': 1, 'b': 2}
>>> k1, k2 = random.sample(d.keys(), 2)          # Python 3
>>> k1, k2 = random.sample(d, 2)                 # Python 2
>>> k1, k2
['a', 'b']

然后,您可以就地交换两个集合的值。

>>> d[k1], d[k2] = d[k2], d[k1]
>>> d
{'b': 1, 'a': 2}

答案 1 :(得分:0)

你可以试试这个:

import random
engalpha =['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
new_dict = {a:b for a, b in zip(engalpha, map(chr, random.sample(range(97,123), 26)))}
key_val = random.choice(list(new_dict.keys()))
final_dict = {b if a == key_val else a:a if a == key_val else b for a, b in new_dict.items()}

关于你最近的评论:

import random
s = {'a': 'h', 'b': 'd', 'c': 'y'} 
random_dict = [(a, b) for a, b in random.sample(list(s.items()), 2)]
new_dict = {a:b for a, b in zip([i[0] for i in sorted(random_dict, key=lambda x:x[0])], [i[-1] for i in sorted(random_dict, key=lambda x:x[-1])][::-1])}
final_dict = {a:new_dict.get(a, b) for a, b in s.items()} 

输出(随机生成):

{'a': 'y', 'c': 'h', 'b': 'd'}

答案 2 :(得分:0)

public partial class MyViewModel
{
    public MyViewModel(MyModel modelInstance)
    {

    }
}

在运行时,将d = {12: 34, 67: 89} k, v = random.choice(list(d.items())) d[v] = k d.pop(k) 的随机输出作为:

d