【问题标题】:How to use the get induvidual values from a dictionary via key如何使用通过键从字典中获取单个值
【发布时间】:2014-06-10 07:39:49
【问题描述】:

我正在制作一个程序,您可以在其中将字母和符号配对以破解密码,我正在使用字典来存储所有配对。我正在尝试创建一个系统,您可以通过访问字典并选择一个键(当前是符号)来取消配对符号并找到它的值,然后可以使用.replace()

问题是我找不到合适的方法来允许用户从字典中选择单个键并将值放入一个变量中,然后该变量可用于撤消配对。我曾尝试使用 .get() 函数,但我不知道如何让用户选择单个键。有没有具体的功能或者可以用.get()完成吗

这是我的代码:

if del_question == "2":
    print("These are your letter and symbol pairings")
    print(dictionary)
    if dict.get(dictionary):
        print(letter)
else:
    print('not found')

del_letter = input("Please input the symbol you wish to unpair: ")
if del_letter in words:
    del_symbol = dict.get(dictionary)
    words = words.replace(del_symbol, del_letter)
    del dictionary[del_letter]
    print(words)
else:
    print(del_symbol, "was not found")

这是我收到的错误消息:

Traceback (most recent call last):
File "S:\Computer Scince\Controlled Assessment\Codebreaker.py", line 86, in <module>
print(del_symbol, "was not found")
NameError: name 'del_symbol' is not defined

【问题讨论】:

    标签: python python-3.x dictionary key-value


    【解决方案1】:

    @Burhan 的回答可能是做你想做的最好的方法。但是,它并没有解释你的错误信息,也没有解释你当前的代码有什么问题。

    你的错误信息是

    Traceback (most recent call last):
    File "S:\Computer Scince\Controlled Assessment\Codebreaker.py", line 86, in <module>
    print(del_symbol, "was not found")
    NameError: name 'del_symbol' is not defined
    

    如果你花时间阅读它,你会发现最后一行说

    NameError: name 'del_symbol' is not defined
    

    这正是所说的。运行print(del_symbol, "was not found") 行时,变量del_symbol 尚未创建。

    这是因为您在代码的 if 部分中创建了变量 del_symbol

    if del_letter in words:
        del_symbol = dict.get(dictionary)
    else:
        print(del_symbol, "was not found")
    

    请注意,del_symbol 只会被创建 if del_letter in words 是真的。如果此条件不成立,程序将直接跳到else,并尝试运行print 命令。然后它意识到del_symbol尚未创建,并打印错误。

    我想你的意思是print(del_letter, "was not found")。这会起作用,因为del_letter 是在if 状态之外创建的。

    另外,我认为del_symbol = dict.get(dictionary) 不会像您认为的那样做。您必须像这样指定您感兴趣的符号:

    del_symbol = dict.get(dictionary, del_letter)
    

    请记住,当您创建字典时,会创建一个新的字典对象,其方法与字典类的所有方法相同,因此您可以更轻松地执行与上述相同的操作,如下所示:

    del_symbol = dictionary.get(del_letter)
    

    或者更简单:

    del_symbol = dictionary[del_letter]
    

    dictionary.get() 相对于dictionary[] 的唯一优势是dictionary.get() 允许您在字典中找不到您要查找的键时传递默认参数。例如如果您希望 del_symbol 在可以找到的情况下作为替代品,或者在无法找到的情况下仅使用 del_letter,请使用以下内容:

    del_symbol = dictionary.get(del_letter, del_letter)
    

    dictionary.get('letter', 'default_letter')

    【讨论】:

      【解决方案2】:

      如果您只想撤消配对,请从字典中删除密钥。然后字典将只显示可用的配对。

      .get() 接受一个可选的第三个参数,它是在找不到键时返回的值。默认情况下它将返回None。如果没有匹配,您可以使用它返回键(字母)。

      这是一个简化的例子:

      >>> pairs = dict()
      >>> pairs['a'] = 'z'
      >>> pairs['b'] = '4'
      >>> pairs['c'] = 'r'
      >>> for k,v in pairs.items():
      ...    print('Key: {0} Replacement: {1}'.format(k,v))
      ...
      Key: a Replacement: z
      Key: c Replacement: r
      Key: b Replacement: 4
      >>> sentence = 'A cat in the hat'
      >>> ''.join(pairs.get(letter, letter) for letter in sentence)
      'A rzt in the hzt'
      >>> del(pairs['c'])
      >>> pairs['t'] = 'o'
      >>> ''.join(pairs.get(letter, letter) for letter in sentence)
      'A czo in ohe hzo'
      >>> for k,v in pairs.items():
      ...     print('Key: {0} Replacement: {1}'.format(k, v))
      ...
      Key: a Replacement: z
      Key: b Replacement: 4
      Key: t Replacement: o
      

      现在,为了让用户能够从字典中删除一个键(配对),只需要求他们替换字母并将其删除(使用del())。

      这样您的字典只包含有效的密钥对(替换)。

      【讨论】:

      • 请注意,该问题标有python-3.x,因此iteritems 将不起作用。对于 Python 3,iteritems 应仅替换为 items
      猜你喜欢
      • 2018-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多