Python 具有不同词序字符串键的词典
我有一本字串字典,作为不同语序的关键字。 如何删除重复的键(相同的单词以不同的顺序设置)? 这些值对于相同的键是相同的,所以只需要从中选择1 简单的想法是使用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
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,可能与原始字典中的任何键都不匹配-如果这很重要,则取决于如何阅读“如何删除重复键(相同的单词以不同的顺序设置)?”-没有任何关于对保留的键进行置乱的内容