在这里需要一些帮助,因为我在这个问题上过去一小时都在摸不着头脑:
items = {1: {'title': u'testing123', 'description': u'testing456'},
2: {'title': u'testing123', 'description': u'testing456'},
3: {'title': u'testing123', 'description': u'testing456'},
4: {'title': u'testing123', 'description': u'testing456'},
5: {'title': u'testing123', 'description': u'testing456'},
6: {'title': u'something', 'description': u'somethingelse'}}
itemscopy = items.copy()
for key1, val1 in itemscopy.iteritems():
for key2, val2 in itemscopy.iteritems():
if val1.get('description') == val2.get('description'):
del items[key2]
我试图从items
词典中删除重复项,以便结果排除所有重复项,但是,我将它们全部删除,以便我的最终结果是:
{6: {'title': u'something', 'description': u'somethingelse'}}
应该是:
{1: {'title': u'testing123', 'description': u'testing456'}, 6: {'title': u'something', 'description': u'somethingelse'}}
答案 0 :(得分:3)
您可以创建自己的功能。我使用的是Python 3,但我认为唯一稍微改变的是items
类的dict
函数和处理异常的方式(语法)。
def remove_by_value(d, value):
key = 0
for k, v in d.items(): # iteritems
if v == value:
key = k
break
try:
del d[key] # in case the value is not in the dictionary
except KeyError:
print('value not in the dictionary')
return d
d = {"12":12, "14":14, "28":28}
print(remove_by_value(d, 28)) # print
答案 1 :(得分:2)
创建另一个具有值作为键的字典,然后检查
vals_seen = {}
for key, val in itemscopy.iteritems():
if val['description'] in vals_seen:
del items[key]
else:
vals_seen[val['description']] = 1
答案 2 :(得分:0)
因此,对于每个元素,您希望查看其值是否存在于其他元素中。
您的代码存在的问题是您正在检查密钥1。您可以通过添加if
直接在and key1 != key2
中排除此案例。
如果您将dict转换为应该唯一的值(或使用元组的值),那么您将得到相同的结果。
答案 3 :(得分:0)
我就是这样做的:
def customCount(value, d):
return len([key for key in d if d[key]==value])
RemovedDuplicateDict = {k:items[k] for k in items.keys() if customCount(items[k], items) < 2}