我有一个字典,其中有两个键标识一组数据。密钥当前存储为排列(因此密钥1,2存在,密钥2,1存在,即使它们具有相同的数据)。
我想消除重复的值。
例如:
我有这个(其中key1,key2重复为key2,key1)
dict = {'key1, key2':1, 'key2, key3':2, 'key2, key1':1}
我想
dict = {'key1, key2':1,'key2, key3':2}
有什么想法吗?
答案 0 :(得分:2)
dict((", ".join(sorted(k.split(", "))), v) for k, v in d.iteritems())
能做你想要的吗?
答案 1 :(得分:2)
首先,永远不要使用dict
作为变量名称,它会影响内置函数。
您可以将任何不可变对象用作字典键,因此像frozenset
这样的集合可能比字符串更适合您的用例:
>>> data = {'key1, key2':1, 'key2, key3':2, 'key2, key1':1}
>>> new_data = {
frozenset(item.strip() for item in key.split(',')): val
for key, val in data.items()
}
>>> new_data
{frozenset({'key1', 'key2'}): 1,
frozenset({'key2', 'key3'}): 2}
如果你真的需要键是字符串:
>>> {", ".join(key): val for key, val in new_data.items()}
{'key2, key1': 1, 'key3, key2': 2}
[更新]
使用Achim建议的排序元组:
>>> new_data = {
tuple(sorted(item.strip() for item in key.split(','))): val
for key, val in data.items()
}
>>> new_data
{('key1', 'key2'): 1, ('key2', 'key3'): 2}
>>> {", ".join(key): val for key, val in new_data.items()}
{'key1, key2': 1, 'key2, key3': 2}