Python 通过if语句进行条件字典查找时出现问题
我有一本字典,里面有很多值。这些值通过for循环提供给字典Python 通过if语句进行条件字典查找时出现问题,python,if-statement,dictionary,Python,If Statement,Dictionary,我有一本字典,里面有很多值。这些值通过for循环提供给字典 storageDict = {} listholder = ["word1", "word2", "word2", "word3", "word4", "word5", "word6", "word7"] values = ["word1", "word2", "word3", "word2", "word5", "word6", "word7", "word8"] index_tracker = 0 for each_element
storageDict = {}
listholder = ["word1", "word2", "word2", "word3", "word4", "word5", "word6", "word7"]
values = ["word1", "word2", "word3", "word2", "word5", "word6", "word7", "word8"]
index_tracker = 0
for each_element in listholder:
if index_tracker == 7:
pass
else:
storageDict[str(each_element)] = values[index_tracker]
index_tracker += 1
print(storageDict)
这为我提供了以下输出:
{'word5': 'word6', 'word1': 'word1', 'word3': 'word2', 'word4': 'word5', 'word6': 'word7', 'word2': 'word3'}
虽然所有键值组合都是唯一的,但我希望避免字典中包含与键值组合相同的键值组合的任何情况。i、 e在上述词典中,我们有以下两种键值组合:
“word3”:“word2”
“word2”:“word3”
KeyError
:
storageDict = {}
listholder = ["word1", "word2", "word2", "word3", "word4", "word5", "word6", "word7"]
values = ["word1", "word2", "word3", "word2", "word5", "word6", "word7", "word8"]
index_tracker = 0
for each_element in listholder:
if index_tracker == 7:
pass
else:
if storageDict[each_element] == values[index_tracker] and storageDict[values[index_tracker]] == each_element:
pass
else:
storageDict[each_element] = values[index_tracker]
index_tracker += 1
print(storageDict)
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/momely/placementarchitect/testbench.py", line 42, in <module>
if storageDict[each_element] == values[index_tracker] and storageDict[values[index_tracker]] == each_element:
KeyError: 'word1'
我期望的输出是两种情况下的输出:
{'word5': 'word6', 'word1': 'word1', 'word4': 'word5', 'word6': 'word7', 'word2': 'word3'}
或:
这是键错误
:
storageDict = {}
listholder = ["word1", "word2", "word2", "word3", "word4", "word5", "word6", "word7"]
values = ["word1", "word2", "word3", "word2", "word5", "word6", "word7", "word8"]
index_tracker = 0
for each_element in listholder:
if index_tracker == 7:
pass
else:
if storageDict[each_element] == values[index_tracker] and storageDict[values[index_tracker]] == each_element:
pass
else:
storageDict[each_element] = values[index_tracker]
index_tracker += 1
print(storageDict)
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/momely/placementarchitect/testbench.py", line 42, in <module>
if storageDict[each_element] == values[index_tracker] and storageDict[values[index_tracker]] == each_element:
KeyError: 'word1'
回溯(最近一次呼叫最后一次):
文件“C:/Users/Admin/PycharmProjects/momely/placementarchitect/testbench.py”,第42行,在
如果storageDict[每个\u元素]==值[索引\u跟踪器]和storageDict[值[索引\u跟踪器]]==每个\u元素:
关键字错误:“word1”
我相信我理解错误发生的原因。通过在条件if语句中包含我的check,我正在请求一个还不存在的字典键的键值
但是人们怎么检查键值呢
我考虑改用元组,但需要在另一个操作中使用字典的快速循环。响应不准确 嗯。在@spectras和@wwii的帮助下(感谢您为我指明了正确的方向),我能够想出一个解决方案。问题在于我设置逻辑检查的方式,以及没有使用some_dict.get(item)方法 以下是解决方案:
storageDict = {}
listholder = ["word1", "word2", "word2", "word3", "word4", "word5", "word6", "word7"]
values = ["word1", "word2", "word3", "word2", "word5", "word6", "word7", "word8"]
index_tracker = 0
for each_element in listholder:
if index_tracker == 7:
pass
else:
if storageDict.get(each_element) == storageDict.get(values[index_tracker]) and each_element == storageDict.get(values[index_tracker]):
pass
else:
storageDict[each_element] = values[index_tracker]
index_tracker += 1
print(storageDict)
这将根据需要生成输出:
{'word5': 'word2', 'word7': 'word6', 'word6': 'word5', 'word2': 'word1', 'word3': 'word2', 'word4': 'word3'}
谢谢大家提供的有用提示。这确实帮助我解决了这个问题
M在这两个列表中使用
zip
,并检查字典中的键值对是否有备用键值对:
d = {}
for k, v in list(zip(listholder, values))[:-1]:
if v in d:
if d[v] == k:
continue
d[k] = v
print(d)
# {'word5': 'word6', 'word4': 'word5', 'word2': 'word3', 'word1': 'word1', 'word6': 'word7'}
现有密钥在原始代码中得到更新,您将跳过两个列表中的最后一项。我在这里复制了它们。这里有一种方法。我基本上是对它们进行筛选,筛选出我们不需要的条目,然后将筛选出的列表转换成 输出:
{'word5': 'word6', 'word4': 'word5', 'word7': 'word8', 'word6': 'word7', 'word1': 'word1', 'word2': 'word3'}
实际上,你期望的输出是什么?你好。我想要的输出是:{'word5':'word6','word1':'word1','word3':'word2','word4':'word5','word6':'word7'}。将添加到上面。如果
某些dict
具有项作为键,则可以检查某些dict中的项是否为=>True
。或者您可以只处理KeyError
异常。或者,您可以使用dict.get
方法,some dict.get(item)
将返回值(如果有这样一个键),或者如果没有,则返回“None”。是为这个设计的。你好。这是解决方案的一部分。但这并不能完全解决我的问题。如果我在If语句中使用了一些_dict.get(item)(如果storageDict.get(每个_元素)=value[index\u tracker]和storageDict.get(value[index\u tracker])==每个_元素:)。我得到了相同的输出:{'word2':'word3','word5':'word6','word6':'word7','word3':'word2','word4':'word5','word1':'word1'}。此处的组合“word2”:“word3”和“word3”:“word2”仍然存在。此处缺少条目“word1”:“word1”。从你在问题下方的评论来看,你似乎想要这个?哦,是的!你是对的!现在我需要投票否决我自己的回应!英雄联盟谢谢你把它捡起来!没问题。有多种方法可以解决这个问题。我以这种方式发布了一条消息。