Python 删除字典中具有相同值的键
Python remove keys with the same value on a dictionary
我需要对字典执行非 "natural" 操作,所以我想知道执行此操作的最佳 pythonic 方法是什么。
我需要通过删除所有具有相同值的键来简化字典(键不同,值相同)
例如:
输入:
dict = {key1 : [1,2,3], key2: [1,2,6], key3: [1,2,3]}
预期输出:
{key1 : [1,2,3], key2:[1,2,6]}
我不关心删除哪个键(在示例中:key1 或 key3)
交换键和值;重复的键值对将作为副作用被删除(因为字典不允许重复的键)。再次交换键和值。
>>> d = {'key1': [1,2,3], 'key2': [1,2,6], 'key3': [1,2,3]}
>>> d2 = {tuple(v): k for k, v in d.items()} # exchange keys, values
>>> d = {v: list(k) for k, v in d2.items()} # exchange again
>>> d
{'key2': [1, 2, 6], 'key1': [1, 2, 3]}
注意:使用 tuple(v)
是因为 list
不可哈希;不能直接作为key使用
顺便说一句,不要使用 dict
作为变量名。它将隐藏内置 function/type dict
.
您可以遍历您的字典项并使用集合来检查我们目前看到的内容,如果我们已经看到值则删除一个键:
d = {"key1" : [1,2,3], "key2": [1,2,6], "key3": [1,2,3]}
seen = set()
for k, v in d.items(): # list(items) for python3
temp = tuple(v)
if temp in seen:
del d[k]
seen.add(temp)
print(d)
{'key1': [1, 2, 3], 'key2': [1, 2, 6]}
这将比使用创建字典和反转值更有效,因为您只需要强制转换为元组一次,而不是从元组转换回列表。
此解决方案删除具有相同值的键而不创建新字典。
seen = set()
for key in mydict.keys():
value = tuple(mydict[key])
if value in seen:
del mydict[key]
else:
seen.add(value)
我想你也可以这样做。但我没有说,因为似乎有更有效的方法。是在线的。
for i in dictionary.keys():
if dictionary.values().count(dictionary[i]) > 1:
del dictionary[i]
这对我有用:
seen = set()
for key in mydict.copy():
value = tuple(mydict[key])
if value in seen:
del mydict[key]
else:
seen.add(value)
我需要对字典执行非 "natural" 操作,所以我想知道执行此操作的最佳 pythonic 方法是什么。
我需要通过删除所有具有相同值的键来简化字典(键不同,值相同)
例如: 输入:
dict = {key1 : [1,2,3], key2: [1,2,6], key3: [1,2,3]}
预期输出:
{key1 : [1,2,3], key2:[1,2,6]}
我不关心删除哪个键(在示例中:key1 或 key3)
交换键和值;重复的键值对将作为副作用被删除(因为字典不允许重复的键)。再次交换键和值。
>>> d = {'key1': [1,2,3], 'key2': [1,2,6], 'key3': [1,2,3]}
>>> d2 = {tuple(v): k for k, v in d.items()} # exchange keys, values
>>> d = {v: list(k) for k, v in d2.items()} # exchange again
>>> d
{'key2': [1, 2, 6], 'key1': [1, 2, 3]}
注意:使用 tuple(v)
是因为 list
不可哈希;不能直接作为key使用
顺便说一句,不要使用 dict
作为变量名。它将隐藏内置 function/type dict
.
您可以遍历您的字典项并使用集合来检查我们目前看到的内容,如果我们已经看到值则删除一个键:
d = {"key1" : [1,2,3], "key2": [1,2,6], "key3": [1,2,3]}
seen = set()
for k, v in d.items(): # list(items) for python3
temp = tuple(v)
if temp in seen:
del d[k]
seen.add(temp)
print(d)
{'key1': [1, 2, 3], 'key2': [1, 2, 6]}
这将比使用创建字典和反转值更有效,因为您只需要强制转换为元组一次,而不是从元组转换回列表。
此解决方案删除具有相同值的键而不创建新字典。
seen = set()
for key in mydict.keys():
value = tuple(mydict[key])
if value in seen:
del mydict[key]
else:
seen.add(value)
我想你也可以这样做。但我没有说,因为似乎有更有效的方法。是在线的。
for i in dictionary.keys():
if dictionary.values().count(dictionary[i]) > 1:
del dictionary[i]
这对我有用:
seen = set()
for key in mydict.copy():
value = tuple(mydict[key])
if value in seen:
del mydict[key]
else:
seen.add(value)