我有一本字典
GiftDict = {'Seth':'A', 'Jeremy':'B', 'Ben':'C'}
我想把这个字典中的值打乱排列到不同的键上
我试着像这样把字典一分为二。。。
person = GiftDict.keys()
partner = GiftDict.values()
用打乱数值
import random
random.shuffle(partner)
但我一直得到一个类型错误:"图片值"对象不是可下标的
我想重新创建字典,但要使用打乱的值。这是去那里的正确方式吗?有什么建议吗?谢谢
如果您使用的是Python版本<3.7 Python dicts没有顺序,所以嘘是没有意义的。如果你使用的是较新的Python版本,你可以打乱dicts项目,如下所示。
import random
l = list(GiftDict.items())
random.shuffle(l)
shuffled_dict = dict(l)
您的问题是方法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'}
如前所述,您无法重新整理字典。但是,您可以创建一个字典值的列表,对其进行混洗,然后创建一个具有相同键和更新值的新字典。
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
您需要:
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'}