Python:在字典中添加元素以设置值

HRI*_*bar 2 python dictionary add set

我在将值添加到集合中是字典中的值时遇到问题。我必须使用集合作为值而不是列表或其他任何东西。我已经看到了这个线程,但是并不能完全解决我的问题。

from collections import defaultdict
datoteka = open("vzorec.list","rt")
slovar = defaultdict(set)

for vrstica in datoteka:
    seznam = vrstica.split("\t")
    naslov = seznam[0]
    beseda = seznam[len(seznam)-1]
    beseda = beseda.strip()
    naslov2 = ""
    for crka in naslov:
        if crka == "(":
            break
        else:
            naslov2 = naslov2 + crka
    naslov = naslov2.lstrip('"')

    if naslov not in slovar:
        slovar[naslov] = set(beseda)

    elif naslov in slovar:
        slovar[naslov] = slovar[naslov].add(beseda)



print(slovar)
Run Code Online (Sandbox Code Playgroud)

我收到一个错误,指出字符串类型没有添加功能。但是为什么python不理解我想要将集合作为值。我什至用defaultdict

Jul*_*ian 5

Python 理解得很好:)。您的代码中有错误。

set.add改变 set 并返回None,所以你已经放弃了你的 set 并将键设置为None。你只想做slovar[naslov].add(beseda)是否naslov在集合中,而不关心返回值。

我看不到字符串如何进入那里,所以如果这不能解决您的问题,您需要粘贴完整的回溯。


mgi*_*son 5

您只想要:

slovar[naslov].add(beseda)
Run Code Online (Sandbox Code Playgroud)

代替:

if naslov not in slovar:
    slovar[naslov] = set(beseda) # set of characters in beseda string ???

elif naslov in slovar:
    slovar[naslov] = slovar[naslov].add(beseda) # add to the set, returns None ???
Run Code Online (Sandbox Code Playgroud)

之所以起作用,是因为使用defaultdict,如果键不存在,它将为该特定键添加一个空集作为值,然后将其返回空集。因此,第一次出现时,您slovar[naslov]将返回一个空集.add(beseda)

  • 如果`beseda`是一个字符串,则`set(beseda)`将返回一组单独的字符,而`slovar [naslov] .add(beseda)`将一个完整的字符串插入现有的字符集中。这里可能不需要这两种行为之一。 (2认同)