【问题标题】:Try keys in a dictionary until one works - python 2.7尝试字典中的键,直到一个有效 - python 2.7
【发布时间】:2018-01-05 23:26:19
【问题描述】:

我的字典包含键(可能重复也可能不重复)和值(都是唯一的)。当我的键值对不起作用时,我收到异常错误。当我遇到异常时,我想移动到下一个匹配键,并尝试它的值。如果它们都不起作用,请到达“finally”异常处理程序并继续下一个键。

以下是列出的某种逻辑,除了我当前的逻辑仅在我想在达到“最终”之前用尽所有关键选项时尝试另一种关键可能性。

for currentFile, originalFile in filepath_dictionary.items():
try:
    relocateSource(currentFile, originalFile)
except:
    # (Some logic which tries the next key, value pair in which the key matches the current key
finally:
    print 'Could not relocate file: ' + currentFile

【问题讨论】:

  • 您的密钥不会重复。

标签: python python-2.7 dictionary exception


【解决方案1】:

如果您认为您的键重复,但您的值不重复,那么您的数据结构错误,因为字典键是唯一的。

有两种可能的解决方案:

  • 反转您的字典结构,使唯一的文件名是键,重复的文件名是值。
  • 将字典中的每个值设为文件名列表,以便将多个唯一文件名与重复的文件名相关联。换句话说,您通过将重复文件名与多个唯一文件名而不是仅一个文件名相关联来表示重复文件名的重复。

选择第二个选项会得到这样的结果:

for current_file, original_files in filepath_dictionary.items():
    for original_file in original_files:
        try:
            relocate_source(current_file, original_file)                
            break
        except:
            pass
    else:
        print 'Could not relocate file: ', current_file

【讨论】:

  • 是的!谢谢你。这么简单,我只是对字典键的理解有误!谢谢!
【解决方案2】:

也许您应该将重复键的值保留在一个列表中,如果出现异常,只需在该列表中搜索。

dct = {key1: [val2_k1, val2_k1], key2: [val2_k2]}

【讨论】:

    【解决方案3】:

    在 Python 字典中,所有键都是唯一的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-28
      • 2017-05-07
      相关资源
      最近更新 更多