我正在尝试学习python(具有VBA背景)。
我已将以下函数导入到我的解释器中:
def shuffle(dict_in_question): #takes a dictionary as an argument and shuffles it
shuff_dict = {}
n = len(dict_in_question.keys())
for i in range(0, n):
shuff_dict[i] = pick_item(dict_in_question)
return shuff_dict
以下是我的口译员的印刷品;
>>> stuff = {"a":"Dave", "b":"Ben", "c":"Harry"}
>>> stuff
{'a': 'Dave', 'c': 'Harry', 'b': 'Ben'}
>>> decky11.shuffle(stuff)
{0: 'Harry', 1: 'Dave', 2: 'Ben'}
>>> stuff
{}
>>>
看起来字典被改组了,但在那之后,字典是空的。为什么?或者,我使用它错了吗?
答案 0 :(得分:3)
你需要将它归还给东西,因为你要返回一个新词典。
>>> stuff = decky11.shuffle(stuff)
答案 1 :(得分:0)
Dogbert的回答解决了您的问题,但请记住,词典没有订单!没有“my_dict的第一个元素”这样的东西。 (使用.keys()或.values()生成一个列表,它确实有一个订单,但字典本身却没有。)因此,谈论“改组”字典并不是真正有意义的。
你在这里实际完成的所有内容都是将字母a,b,c重新映射到整数0,1,2。这些键的哈希值与你开始时的键不同,因此它们以不同的顺序打印。但是你没有改变字典的顺序,因为字典没有开始的顺序。
根据你最终使用它的原因(你是否在迭代键?),你可以做更直接的事情:
shufflekeys = random.shuffle(stuff.keys())
for key in shufflekeys:
# do thing that requires order
作为旁注,词典(又名哈希表)是一个非常聪明,超级有用的数据结构,如果您还不熟悉,我建议您深入学习。良好的哈希函数(和非病理数据)将为您提供O(1)(即常量)查找时间 - 因此您可以在字典中检查密钥是否在一百万个项目的字典中尽可能快十件物品!缺乏秩序是字典的一个关键特征,可以实现这种速度。