5

我在向集合中添加值时遇到问题,该集合是字典中的值。我必须使用集合作为值而不是列表或其他任何东西。我看过这个帖子,但它并没有完全回答我。

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)

我收到一个字符串类型没有添加函数的错误。但是为什么 python 不明白我想要将集合作为值。我什至使用了defaultdict

4

2 回答 2

8

你只想:

slovar[naslov].add(beseda)

代替:

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 ???

这是因为使用 a defaultdict,如果键不存在,它会添加一个空集作为该特定键的值并将其返回空集。所以,第一次,slovar[naslov]返回一个空集,然后.add(beseda).

于 2012-08-21T12:59:06.553 回答
5

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

set.add改变 set 并返回None,因此您已丢弃 set 并将密钥设置为None. 您只想做slovar[naslov].add(beseda)是否naslov在集合中,而不关心返回值。

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

于 2012-08-21T12:58:47.723 回答