Python 通过if语句进行条件字典查找时出现问题

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

我有一本字典,里面有很多值。这些值通过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 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”
因此,在提交到dict之前,我想检查值键组合和键值组合是否已经在字典中。我想出了以下代码,但PyCharm给了我一个
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”。从你在问题下方的评论来看,你似乎想要这个?哦,是的!你是对的!现在我需要投票否决我自己的回应!英雄联盟谢谢你把它捡起来!没问题。有多种方法可以解决这个问题。我以这种方式发布了一条消息。