我是一名新程序员,正在为人员分配编写一些代码,因此需要确保两个具有相同键的字典中没有相同的项目。我需要搜索相同的项目并进行更改。

我正在使用python 3并尝试弄乱for循环,但没有任何作用,但是我猜这是因为我对循环的唯一基本了解。

在下面的代码中,似乎我可以只检查每个变量并单独更改变量,但出于学习的目的以及我的完整脚本ID中的实际作用是按照我描述的方式进行。

from random import choice

names = ['jacob', 'josh', 'alex', 'tyler']
weapons = ['swords', 'ax', 'rock', 'nothing']
armor = ['chest plate', 'none', 'vest', 'mask']

# I dont want to change values through these variables if possible
p1_name = choice(names)
p2_name = choice(names)

p1_weapon = choice(weapons)
p2_weapon = choice(weapons)

p1_armor = choice(armor)
p2_armor = choice(armor)

#here are the dictionarys  I want to change
p1 = {'name': p1_name, 'weapon': p1_weapon, 'armor': p1_armor}
p2 = {'name': p2_name, 'weapon': p2_weapon, 'armor': p2_armor}


我也知道我可能可以手动浏览每个键,即:

if p1['name'] == p2['name']:


但是如果有可能通过某种循环来做到这一点,我宁愿这样做,因为在我的原始代码中,字典会改变。

最佳答案

您也可以在字典中收集列表,然后假设字典具有相似的键(如您的示例所示),则可以使用如下循环:

database = {'name': ['jacob', 'josh', 'alex', 'tyler'],
            'weapon': ['swords', 'ax', 'rock', 'nothing'],
            'armor': ['chest plate', 'none', 'vest', 'mask']}

for key in p1.keys():
    if p1[key] == p2[key]:
        p2[key] = choice(database[key])




为了完全避免检查,您实际上可以从一开始就确保使用random.sample不会分配两个相似的项目:

from random import sample

names = ['jacob', 'josh', 'alex', 'tyler']
weapons = ['swords', 'ax', 'rock', 'nothing']
armor = ['chest plate', 'none', 'vest', 'mask']

p1_name, p2_name = sample(names, 2)

p1_weapon, p2_weapon = sample(weapons, 2)

p1_armor, p2_armor = sample(armor, 2)

p1 = {'name': p1_name, 'weapon': p1_weapon, 'armor': p1_armor}
p2 = {'name': p2_name, 'weapon': p2_weapon, 'armor': p2_armor}

关于python - 有没有办法遍历两个词典中的所有键并更改所有重复项,以便它们的词典项都不同,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57154751/

10-12 18:21