我是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()
}

08-24 20:15