我是Python的新手,正在使用Python 3.7。所以,我试图使我的字典值等于set,即dictionaryNew [kId] = setItem
。因此,基本上我希望每个kId
(键)都有一个对应的set行作为其值。我正在使用* 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
时打印空集。那我该怎么做才能解决这个问题呢?
问题来源:stackoverflow
您一直使用相同的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()
}
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。