Python 具有不同词序字符串键的词典

Python 具有不同词序字符串键的词典,python,dictionary,duplicates,set,key,Python,Dictionary,Duplicates,Set,Key,我有一本字串字典,作为不同语序的关键字。 如何删除重复的键(相同的单词以不同的顺序设置)? 这些值对于相同的键是相同的,所以只需要从中选择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 t

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

使用不可变且可散列的
frozenset

使用不可变且可散列的
frozenset

尝试:

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]
我希望这能有所帮助。

试试:

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]

我希望这能有所帮助。

任何时候你想散列一个集合,请使用
冻结集

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

output = dict()
for key, value in dictionary.iteritems():
    new_key = frozenset(key.split())
    if new_key not in output.keys():
         output[new_key] = value
我看到一两个问题

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

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}
我看到一两个问题

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

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}

输出中的键是
frozenset(key.split()
transformed键,它可能与原始词典中的任何键都不匹配-如果这很重要,则取决于如何读取“如何删除重复键(相同的词集具有不同的顺序)?”-与对保留的键进行置乱无关输出中的键是
frozenset(key.split()
transformed key,可能与原始字典中的任何键都不匹配-如果这很重要,则取决于如何阅读“如何删除重复键(相同的单词以不同的顺序设置)?”-没有任何关于对保留的键进行置乱的内容