gpt4 book ai didi

python - 有没有办法随机打乱 Python 字典中的键和值,但结果不能有任何原始键值对?

转载 作者:行者123 更新时间:2023-12-01 12:04:45 25 4
gpt4 key购买 nike

我想打乱这本字典中的键值对,这样结果就没有原来的键值对了。起始字典:

my_dict = {'A':'a',
'K':'k',
'P':'p',
'Z':'z'}

不想要的结果示例:

my_dict_shuffled = {'Z':'a',
'K':'k', <-- Original key value pair
'A':'p',
'P':'z'}

想要的结果示例:

my_dict_shuffled = {'Z':'a',
'A':'k',
'K':'p',
'P':'z'}

我已经尝试过 while 循环和 for 循环,但没有成功。请帮忙!提前致谢。

最佳答案

这是我从 Numberphile video 中学到的一个万无一失的算法:)

import itertools
import random

my_dict = {'A': 'a',
'K': 'k',
'P': 'p',
'Z': 'z'}

# Shuffle the keys and values.
my_dict_items = list(my_dict.items())
random.shuffle(my_dict_items)
shuffled_keys, shuffled_values = zip(*my_dict_items)

# Offset the shuffled values by one.
shuffled_values = itertools.cycle(shuffled_values)
next(shuffled_values, None) # Offset the values by one.

# Guaranteed to have each value paired to a random different key!
my_random_dict = dict(zip(shuffled_keys, shuffled_values))

免责声明(感谢提及,@jf328):这不会生成所有可能的排列!它只会生成恰好一个“周期”的排列。简而言之,该算法永远不会给您以下结果:

   {'A': 'k',
'K': 'a',
'P': 'z',
'Z': 'p'}

但是,我想您可以通过构建随机子循环列表来扩展此解决方案:

(2, 2, 3) => concat(zip(*items[0:2]), zip(*items[2:4]), zip(*items[4:7]))

关于python - 有没有办法随机打乱 Python 字典中的键和值,但结果不能有任何原始键值对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58869261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com