我是一名新程序员,正在为人员分配写一些代码,我需要确保两个具有相同键的字典中没有相同的项目。我需要搜索相同的项目并进行更改。
我正在使用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']:
但是如果有可能通过某种循环来做到这一点,我宁愿这样做,因为在我的原始代码中,字典将改变。
答案 0 :(得分:0)
随机排列您拥有的事物的列表,然后让第一人称获得每个列表的第0个项目,第二人称获得第一个,依此类推。只要清单清单是唯一的,每个人都会拥有一套独特的设备:
from random import choice, shuffle
names = ['jacob', 'josh', 'alex', 'tyler']
weapons = ['swords', 'ax', 'rock', 'nothing']
armor = ['chest plate', 'none', 'vest', 'mask']
shuffle(names)
shuffle(weapons)
shuffle(armor)
people = []
for i in range(2):
people.append({
'name': names[i],
'weapon': weapons[i],
'armor': armor[i]
})
print(people)
# unpack the list to get two separate persons
p1, p2 = people
print(p1)
print(p2)
输出:
[{'name': 'tyler', 'weapon': 'nothing', 'armor': 'chest plate'}, {'name': 'josh', 'weapon': 'rock', 'armor': 'mask'}]
{'name': 'tyler', 'weapon': 'nothing', 'armor': 'chest plate'}
{'name': 'josh', 'weapon': 'rock', 'armor': 'mask'}
答案 1 :(得分:0)
您也可以在字典中收集列表,然后假设您的字典具有相似的键(如您的示例所示),则可以使用如下循环:
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}