Python 有没有办法检查两个字典中的所有键并更改所有重复项,使字典项都不同

Python 有没有办法检查两个字典中的所有键并更改所有重复项,使字典项都不同,python,dictionary,for-loop,Python,Dictionary,For Loop,我是一名新程序员,正在为一项人事任务编写一些代码,我需要确保两个键相同的字典没有相同的项。我需要搜索相同的项目并更改它们 我在使用Python3,并且尝试过处理for循环,但是没有得到任何效果,但我猜这是因为我对它们只有基本的理解 在下面的代码中,似乎我可以检查每个变量并单独更改变量,但为了学习和了解完整脚本中的实际内容,我希望按照我描述的方式执行 from random import choice names = ['jacob', 'josh', 'alex', 'tyler'] weap

我是一名新程序员,正在为一项人事任务编写一些代码,我需要确保两个键相同的字典没有相同的项。我需要搜索相同的项目并更改它们

我在使用Python3,并且尝试过处理for循环,但是没有得到任何效果,但我猜这是因为我对它们只有基本的理解

在下面的代码中,似乎我可以检查每个变量并单独更改变量,但为了学习和了解完整脚本中的实际内容,我希望按照我描述的方式执行

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']: 

但是,如果可以通过某种循环来实现,我更愿意这样做,因为在我的原始代码中,dicts会发生变化。

将您拥有的内容列表洗牌,然后让第一人称获得每个列表的第0项,第二人称获得第1项,依此类推。只要库存清单是唯一的,每个人都将拥有一套独特的设备:

从随机导入选择中,洗牌
姓名=[“雅各布”、“乔希”、“亚历克斯”、“泰勒”]
武器=[‘剑’、‘斧’、‘石头’、‘什么都没有’]
护甲=[‘胸甲’、‘无’、‘背心’、‘面具’]
洗牌(姓名)
洗牌(武器)
洗牌(护甲)
人=[]
对于范围(2)中的i:
人物。附加({
“名称”:名称[i],
“武器”:武器[i],
“盔甲”:盔甲[i]
})
印刷品(人)
#打开列表,找到两个单独的人
p1,p2=人
打印(p1)
打印(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'}

洗牌你所拥有的物品清单,然后让第一人称得到每个清单的第0项,第二人称第一项,依此类推。只要库存清单是唯一的,每个人都将拥有一套独特的设备:

从随机导入选择中,洗牌
姓名=[“雅各布”、“乔希”、“亚历克斯”、“泰勒”]
武器=[‘剑’、‘斧’、‘石头’、‘什么都没有’]
护甲=[‘胸甲’、‘无’、‘背心’、‘面具’]
洗牌(姓名)
洗牌(武器)
洗牌(护甲)
人=[]
对于范围(2)中的i:
人物。附加({
“名称”:名称[i],
“武器”:武器[i],
“盔甲”:盔甲[i]
})
印刷品(人)
#打开列表,找到两个单独的人
p1,p2=人
打印(p1)
打印(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'}

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

database={'name':['jacob','josh','alex','tyler'],
‘武器’:[‘剑’、‘斧’、‘石头’、‘什么都没有’],
“盔甲”:[“胸甲”、“无”、“背心”、“面具”]]
对于p1.keys()中的键:
如果p1[键]==p2[键]:
p2[键]=选项(数据库[键])

为了避免这种检查,您实际上可以从一开始就使用以下方法确保不会分配两个类似的项目:

来自随机导入样本
姓名=[“雅各布”、“乔希”、“亚历克斯”、“泰勒”]
武器=[‘剑’、‘斧’、‘石头’、‘什么都没有’]
护甲=[‘胸甲’、‘无’、‘背心’、‘面具’]
p1_名称,p2_名称=样本(名称,2)
p1_武器,p2_武器=样本(武器,2)
p1_装甲,p2_装甲=样本(装甲,2)
p1={'name':p1_名称,“武器”:p1_武器,“装甲”:p1_装甲}
p2={'name':p2_名称,'武器':p2_武器,'盔甲':p2_盔甲}

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

database={'name':['jacob','josh','alex','tyler'],
‘武器’:[‘剑’、‘斧’、‘石头’、‘什么都没有’],
“盔甲”:[“胸甲”、“无”、“背心”、“面具”]]
对于p1.keys()中的键:
如果p1[键]==p2[键]:
p2[键]=选项(数据库[键])

为了避免这种检查,您实际上可以从一开始就使用以下方法确保不会分配两个类似的项目:

来自随机导入样本
姓名=[“雅各布”、“乔希”、“亚历克斯”、“泰勒”]
武器=[‘剑’、‘斧’、‘石头’、‘什么都没有’]
护甲=[‘胸甲’、‘无’、‘背心’、‘面具’]
p1_名称,p2_名称=样本(名称,2)
p1_武器,p2_武器=样本(武器,2)
p1_装甲,p2_装甲=样本(装甲,2)
p1={'name':p1_名称,“武器”:p1_武器,“装甲”:p1_装甲}
p2={'name':p2_名称,'武器':p2_武器,'盔甲':p2_盔甲}

使用相同的键可以做什么?没有相同的项目?如何改变它们?我想他的意思是,没有两个人应该在他的游戏中拥有相同的库存。是的,这仍然很清楚,但假设我们找到了一个重复的,该怎么办?@Tomerikoo我只想在适当的列表中将项目更改为不同的字符串。使用相同的键,你会怎么做?没有相同的项目?如何改变他们?我认为他的意思是,没有两个人应该在他的游戏中拥有相同的库存。是的,这仍然很清楚,但假设我们找到了一个重复的,怎么办?@Tomerikoo我只想在适当的列表中将项目更改为不同的字符串这很好,几乎正是我所需要的,但是否可以在列表之外将它们创建为单独的dict这很好,几乎正是我所需要的,但是否可以在列表之外将它们创建为单独的dict上面的简单for循环现在我如何使用它来更改p2 dict。假设名称相同,我希望p2 dict使用不同于名称列表的名称您只需更改它,但随后您将面临反复检查是否相同的问题。。。这就是为什么我建议使用
sample
选项,因为它完全不需要检查。。。如果你仍然坚持要检查,我已经更新了我的答案我在试图编辑它时意外删除了我的评论,但效果很好这是我这边的一个错误谢谢你快速正确地回答我喜欢上面的简单for循环现在我如何使用它来更改p2 dict。假设名称相同,并且