我是Python的新手,我不得不通过反复试验来学习,但我无法找到解决问题的方法。
我有一个字典,看起来像这样:
myDict = {'key1': ['item1', 'item2', 'item3'], 'key2': ['item4', 'item5', 'item6'],
'key3': 'item7', 'key4': 'item8', 'key5': ['item1', 'item2', 'item3'], 'key6': 'item7'}
我需要从字典中删除重复的值,并用空值(“”)替换它们。在这里找到了几个解决方案,但它们正在按预期工作
for key, value in myDict.items():
if values not in key newDict.values():
myDict[key] = value
else:
myDict[key] = ""
print newDict
这是删除所有值并输出
# newDict:{key1: '', key2: '', key3: '', key4: '', key5: '', key6: '')
我正在寻找输出
# newDict = {'key1': '', 'key2':['item4', 'item5', 'item6'], 'key3': '', 'key4':
'item8', key5: ['item1', 'item2', 'item3'], 'key6': 'item7'}
答案 0 :(得分:2)
您有正确的总体想法,但您的代码存在三个问题:
myDict
而不是newDict
。values
而不是value
。key
不应该在那里,并抛出SyntaxError
。这是正确的代码:
newDict = {}
for key, value in myDict.iteritems():
if value not in newDict.values():
newDict[key] = value
else:
newDict[key] = ""
print newDict
如果你不在反三元营运者营地,你也可以缩短它:
newDict = {}
for key, value in myDict.iteritems():
newDict[key] = value if value not in newDict.values() else ""
print newDict
或者,如果您只想删除原始dict
(myDict
)中的值而不是构建新值(newDict
),则可以执行以下操作:
foundValues = []
for key, value in myDict.iteritems():
if value not in foundValues:
foundValues.append(myDict[key])
else:
myDict[key] = ""
print myDict
如果您需要按特定顺序删除重复值,请查看OrderedDict
s。
<强>更新强>
根据更新后的要求 - 如果您只需使用dict
初始化myDict
,则可以从头开始从原始OrderedDict
中删除这些值而不是dict
,你需要做的就是替换它:
myDict = {'key1': ['item1', 'item2', 'item3'], 'key2': ['item4', 'item5', 'item6'], 'key3': 'item7', 'key4': 'item8', 'key5': ['item1', 'item2', 'item3'], 'key6': 'item7'}
用这个:
from collections import OrderedDict
…
myDict = OrderedDict([('key1', ['item1', 'item2', 'item3']), ('key2', ['item4', 'item5', 'item6']), ('key3', 'item7'), ('key4', 'item8'), ('key5', ['item1', 'item2', 'item3']), ('key6', 'item7')])
然后使用上面提供的相同代码。
答案 1 :(得分:0)
这样做:
myDict_values = myDict.values() # better than calling this numerous times
for key in myDict.keys():
if myDict_values.count(myDict[key]) > 1: myDict[key] = ""
这不能保证key5
为空而不是key1
,因为字典不是订购的。