【问题标题】:Check if a given key already exists in a dictionary but allow variation [closed]检查字典中是否已存在给定键但允许变化[关闭]
【发布时间】:2015-04-27 16:23:14
【问题描述】:

用这本词典:

class_1 = {'Bob' : [3,4,7], 
       'Jim' : [4,1,3],
       'Greg' : [7,3,9],
       'Fred' : [10,5,3],
       'Jim' : [3,7,9],
       'Jeff' : [2,9,3]}

如何禁止'Jim' 的输入但允许'Jim_2' 的输入?

通过使用if name in class_1: 禁止输入变体输入,谢谢。

【问题讨论】:

  • 请注意,处理 “相似键” 可能会严重影响字典的性能。您还需要一个“类似”更具体的算法。
  • 字典中不允许有重复的键。
  • 在我的版本中,当附加一个键时,它会替换以前的键和值。
  • if name in class_1 没有达到您的预期吗?仅当新密钥尚不存在时才添加它。
  • "当附加一个键时,它会替换之前的键和值" - 1. 这不是appending(这是一个特定于列表的行为);和 2. 这正是应该发生的

标签: python search dictionary python-3.3


【解决方案1】:

字典中不允许有重复的键。当您插入字典时,字典将检查该项目是否已经存在,如果它是该条目的值将被更新。如果它不存在,它将被添加到字典中。

如果您想禁止输入某些键,您需要编写一个辅助函数来检查是否存在某个项目,如果存在则不要将更新写入字典。

【讨论】:

  • 您可以使用.keys() 方法获取字典中的键列表,这将返回字典中的键列表。
【解决方案2】:

如果键不在字典中,以下只会添加 key: value 对:

if new_name not in class_1:
    class_1[new_name] = new_data

【讨论】:

  • 为什么投反对票?这不正是OP想要的吗?我误会了吗?
【解决方案3】:
    user_input = raw_input("Name: ")
    class_1 = {'Bob' : [3,4,7], 
           'Jim' : [4,1,3],
           'Greg' : [7,3,9],
           'Fred' : [10,5,3],
           'Jim' : [3,7,9],
           'Jeff' : [2,9,3]}

    if any(user_input.startswith(k) for k in class_1.keys()):
        print "Valid input!"
    else:
        print "Invalid input!"

如果您想获得输入值和字典中键之间的平均距离(差异),可以尝试查看fuzzy searching。有一些流行的库专门用于此类字符串比较。

【讨论】:

    猜你喜欢
    • 2010-12-08
    • 2010-10-03
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2010-12-22
    相关资源
    最近更新 更多