有没有办法遍历两个字典中的所有键并更改所有重复项,以便字典项都不同

时间:2019-07-22 23:03:11

标签: python dictionary for-loop

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

我正在使用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']: 

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

2 个答案:

答案 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}