【问题标题】:Dictionary with key of string with different word order具有不同词序的字符串键的字典
【发布时间】:2017-07-04 21:56:27
【问题描述】:

我有一个字符串字典作为不同词序的键。 如何删除重复键(以不同顺序设置的相同单词)? 相同的键值是相同的,所以只需要从中选择1个即可。

简单的想法是使用set(words) 作为键,但字典不允许set 作为键。有没有很好的方法来处理这个问题?

my_dict={'Hello tom': 2, 'tom Hello': 2, 'I ate apple': 4, 'ate I apple': 4, 'apple ate I':4}

结果

my_dict_trimmed={'Hello tom': 2, 'I ate apple': 4}

【问题讨论】:

    标签: python dictionary duplicates set key


    【解决方案1】:

    任何时候你想散列一个集合,使用frozenset

    output = dict()
    for key, value in dictionary.iteritems():
        new_key = frozenset(key.split())
        if new_key not in output.keys():
             output[new_key] = value
    

    【讨论】:

    • 输出中的键是 frozenset(key.split() 转换后的键,它可能与原始字典中的任何键都不匹配 - 如果这很重要,取决于如何阅读 "如何删除重复的键(相同的单词设置不同的顺序)?” - 没有什么关于打乱你保留的那个
    【解决方案2】:

    使用不可变和可散列的frozenset

    【讨论】:

      【解决方案3】:

      试试:

      my_dict={'Hello tom':2, 'tom Hello':2, 'I ate apple':4, 'ate I apple':4, 'apple ate I':4}
      
      my_dict_trimmed = dict()
      
      for k in my_dict:
          if sorted(k) in map(sorted, my_dict_trimmed):
              continue
          else:
              my_dict_trimmed[k] = my_dict[k]
      

      我希望这会有所帮助。

      【讨论】:

        【解决方案4】:

        我发现一两个问题

        仅使用sorted 对字谜失败
        拆分后需要排序的单词

        my_dict={'Hello tom':2, 'tom Hello':2, 'I ate apple':4, 'ate I apple':4, 'apple ate I':4}
        
        def MashedKey(k):
            return tuple(sorted(k.split()))
        
        umsk = set([MashedKey(k) for k in my_dict.keys()]) # unique Mashed keys
        
        umsk
        Out[48]: {('Hello', 'tom'), ('I', 'apple', 'ate')}
        

        然后必须通过相同的键“混搭”函数从 my_dict 检索键值对,这里采用第一个相等性:

        od = {}
        for u in umsk:
            for k, v in my_dict.items():
                if MashedKey(k) == u:
                    od.update({k: v})
                    break
        
        od
        Out[50]: {'Hello tom': 2, 'apple ate I': 4}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-19
          • 2014-04-27
          • 1970-01-01
          • 2022-01-19
          • 1970-01-01
          • 2015-09-16
          • 2018-02-26
          • 2013-11-21
          相关资源
          最近更新 更多