2017-02-16 33 views
0

我有一个字符串字典作为不同字顺序的关键字。 如何删除重复的键(用不同的顺序设置相同的单词)? 这些值对于相同的键是相同的,所以只需要从中选择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} 

回答

2

任何时候你想散列一个集合,使用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 
+0

'forzenset'完美运作。谢谢 – notilas

+0

输出中的键是'frozenset(key.split()')转换键,它可能与原始字典中的任何键不匹配 - 如果重要,取决于如何阅读*“如何删除重复键用不同的顺序设置相同的单词)?“* - 没有关于加扰你保留的那个 – f5r5e5d

1

使用frozenset这是不可改变的,可哈希。

+0

'forzenset'完美运作。谢谢 – notilas

0

尝试:

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] 

我希望这有助于。

0

我看到一个问题或两个

只是用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')} 

那么键后进行排序,值对必须通过同一个键'mashing'函数从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} 
相关问题