我是Python的新手,正在使用Python 3.7。因此,我正在尝试使我的字典值等于设置的值,即dictionaryNew[kId] = setItem
。因此,基本上我希望每个kId
(键)都有一个对应的set行作为其值。我正在使用设置,因为我不希望在行中重复值。
这是我下面的代码中的一部分:
setItem = set()
dictionaryNew = {}
for kId, kVals in dictionaryObj.items():
for index in kVals:
if (index is not None):
yourVal = 0
yourVal = yourVal + int(index[10])
setItem.add(str(yourVal))
print(setItem) #the output for this is correct
dictionaryNew[kId] = setItem
setItem.clear()
print(dictionaryNew)
当我打印
setItem
时,结果将正确打印。setItem
的输出:{'658', '766', '483', '262', '365', '779', '608', '324', '810', '701', '208'}
但是当我打印
dictionaryNew
时,结果类似于下面显示的结果。dictionaryNew
的输出:{'12': set(), '13': set(), '17': set(), '15': set(), '18': set(), '10': set(), '11': set(), '14': set(), '16': set(), '19': set()}
我不希望输出像这样。相反,我希望字典中包含一行带有其值的set。但这只是在我尝试打印
dictionaryNew
时打印空集。那我该怎么做才能解决这个问题呢? 最佳答案
您一直都在使用相同的setItem
实例,如果删除setItem.clear()
,则会看到每个键都指向相同的值。
您可以在每次迭代时创建一个新的set()
dictionaryNew = {}
for kId, kVals in dictionaryObj.items():
setItem = set()
for index in kVals:
if index is not None:
setItem.add(str(int(index[10]))) # the temp sum with 0 is useless
dictionaryNew[kId] = setItem
使用dict-comprehension相当于
dictionaryNew = {
kId: {str(int(index[10])) for index in kVals if index is not None}
for kId, kVals in dictionaryObj.items()
}