开发者社区> 问答> 正文

有没有办法使字典值等于python中的set元素?

我是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

展开
收起
is大龙 2020-03-23 17:04:43 430 0
1 条回答
写回答
取消 提交回答
  • 您一直使用相同的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

    2020-03-23 17:04:48
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载