如何在字典中洗牌连接到键的单词?

2024-06-07 11:10:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典

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

我想将此字典中的值洗牌到不同的键。
我试着像这样把字典一分为二

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

并用

import random    
random.shuffle(partner)

但我一直得到一个类型错误:'dict_values'对象不可下标

我想重新创建字典,但要使用无序值。这是去那里的正确方法吗? 有什么建议吗?谢谢


Tags: import类型partner字典错误randomkeysdict
3条回答

如果您使用的是Python版本<;3.7 Python dict没有顺序,因此shuffling是没有意义的。 如果您使用的是较新的Python版本,您可以像下面这样洗牌dicts项

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

您需要:

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'}

您的问题是方法dict.values()返回类型为dict_values的不可下标对象。你可以把它放到一个列表中,但这样洗牌也无济于事

您可以改为使用此函数来洗牌dict:

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'}

相关问题 更多 >

    热门问题