如何随机排列与字典中某个键相关联的单词?

How do I shuffle the words that are connected to a key in a dictionary?

我有字典

GiftDict = {'Seth':'A', 'Jeremy':'B', 'Ben':'C'}

我想将字典中的值改组为不同的键。
我试过像这样把字典一分为二...

person = GiftDict.keys()
partner = GiftDict.values()

并用

打乱值
import random    
random.shuffle(partner)

但我一直收到类型错误:'dict_values'对象不可订阅

我想重新创建字典,但要重新排列值。这是到达那里的正确方法吗? 有小费吗?谢谢!

您需要:

import random    
random.shuffle(list(partner)) # GiftDict.values() can not be shuffled as such, it needs to be converted as list

完整示例:

import random

d = {'Seth':'A', 'Jeremy':'B', 'Ben':'C'}

v = list(d.values())

random.shuffle(v)

for i,k in enumerate(d.keys()):
    d[k] = v[i]

print (d)

输出:

{'Seth': 'B', 'Jeremy': 'A', 'Ben': 'C'}

如果您使用的是 Python 版本 < 3.7 Python 字典没有顺序,因此改组毫无意义。 如果您使用的是较新的 Python 版本,您可以像下面那样随机播放字典项目。

import random
l = list(GiftDict.items())
random.shuffle(l)
shuffled_dict = dict(l)

您的问题是方法 dict.values() returns 类型为 dict_values 的对象不可订阅。您可以将其转换为一个列表,但这样打乱顺序无济于事。

您可以改用此函数来打乱字典:

import random
def shuffle_dict(dic):
    new_values = list(dic.values())
    random.shuffle(new_values)
    return dict(zip(dic.keys(), new_values))

现在:

shuffle_dict(GiftDict)
# > {'Seth': 'B', 'Jeremy': 'C', 'Ben': 'A'}

如前所述here您不能重新排列字典。但是,您可以创建一个字典值列表,将其打乱顺序,然后使用相同的键和更新的值创建一个新字典。

import random

original = {'Seth':'A', 'Jeremy':'B', 'Ben':'C'}
result = {'Seth':'A', 'Jeremy':'B', 'Ben':'C'}
values = list(original.values())

# Shuffle values 
random.shuffle(values)

# Set values back into the result dictionary
for i,j in enumerate(original.keys()):
    result[j] = values[i]

# Now the result dictionary contains the original keys and updated values