我在将值添加到字典中的值时遇到问题。我必须使用集合作为值而不是列表或其他任何东西。我见过this thread,但它并没有完全回答我。
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不明白我想将set设置为值。我甚至使用了defaultdict
答案 0 :(得分:4)
你只想:
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 ???
这是因为使用defaultdict
,如果该键不存在,它会将一个空集添加为该特定键的值并将其返回为空集。因此,第一次,slovar[naslov]
会返回一个空集,然后.add(beseda)
。
答案 1 :(得分:2)
Python理解很好:)。您的代码中存在错误。
set.add
改变集合并返回None
,因此您放弃了集合并将密钥设置为None
。您只想slovar[naslov].add(beseda)
naslov
是否在集合中,而不关心返回值。
我看不到字符串是如何进入的,所以如果这不能解决您的问题,则需要粘贴一个完整的回溯。