【问题标题】:Check if repeating Key or Value exists in Python Dictionary检查 Python 字典中是否存在重复的键或值
【发布时间】:2019-03-01 16:45:57
【问题描述】:

以下是我的字典,我需要检查我是否有重复的键或值

dict = {' 1': 'a', '2': 'b', '3': 'b', '4': 'c', '5': 'd', '5': 'e'}

这应该返回 false 或某种指示符,可以帮助我打印出可能重复的键或值。如果我能够确定键是重复的还是值(但不是必需的),将不胜感激。

【问题讨论】:

  • 以下所有解决方案都有效,我正在标记我使用的那个。下面的解决方案给了我各种曝光

标签: python python-2.7 list dictionary distinct-values


【解决方案1】:

在字典中键不能重复,所以我们只需要处理值。

dict = {...}

# get the values
values = list(dict.values())

然后您可以使用set() 来检查重复项:

if len(values) == len(set(values)): print("no duplicates")
else: print("duplicates)

【讨论】:

    【解决方案2】:

    无法检查字典中的键是否重复,因为 Python 中的字典仅支持唯一键。如果按原样输入字典,则只会将最后一个值与冗余键关联:

    In [4]: dict = {' 1': 'a', '2': 'b', '3': 'b', '4': 'c', '5': 'd', '5': 'e'}
    
    In [5]: dict
    Out[5]: {' 1': 'a', '2': 'b', '3': 'b', '4': 'c', '5': 'e'}
    

    【讨论】:

      【解决方案3】:

      单行查找重复值

      In [138]: {v: [k for k in d if d[k] == v] for v in set(d.values())}
      Out[138]: {'a': [' 1'], 'b': ['2', '3'], 'c': ['4'], 'e': ['5']}
      

      使用set(d.values()) 检查dict 的所有唯一值,然后创建与这些值对应的键列表。

      注意:重复键只会被覆盖

      In [139]: {'a': 1, 'a': 2}
      Out[139]: {'a': 2}
      

      【讨论】:

        【解决方案4】:

        字典不能有重复的键,所以在重复键的情况下它只保留最后一个值,所以检查值(单行是你的朋友):

        print(('There are duplicates' if len(set(dict.values()))!=len(values) else 'No duplicates'))
        

        【讨论】:

          【解决方案5】:

          怎么样

          has_dupes = len(d) != len(set(d.values()))
          

          我正在使用手机,因此无法对其进行测试。但是 j 认为它会起作用。

          【讨论】:

            【解决方案6】:

            好吧,虽然根据文档键值应该是唯一的,但仍然存在重复键的情况。

            例如,

            >>> import json
            >>> a = {1:10, "1":20}
            >>> b = json.dumps(a)
            >>> b
            '{"1": 20, "1": 10}'
            >>> c = json.loads(b)
            >>> c
            {u'1': 10}
            >>>
            

            但一般来说,当 python 发现有冲突时,它会采用分配给该键的最新值。

            对于您的问题,您应该使用比较,例如

            len(dict) == len(set(dict.values()))
            

            因为 python 中的 set 包含 uniqueimmutable 对象的无序集合,所以即使dict.values()中有重复值,它也可以自动获取所有唯一值

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-06-15
              • 2017-06-23
              • 2013-10-15
              • 2018-10-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多