Ell*_* P. 15 python dictionary set
我希望能够创建一个Python字典,其中字符串作为键,字符串集作为值.例如:{ "crackers" : ["crunchy", "salty"] }
它必须是一个集合,而不是列表.
但是,当我尝试以下内容时:
word_dict = dict()
word_dict["foo"] = set()
word_dict["foo"] = word_dict["foo"].add("baz")
word_dict["foo"] = word_dict["foo"].add("bang")
Run Code Online (Sandbox Code Playgroud)
我明白了:
Traceback (most recent call last):
File "process_input.py", line 56, in <module>
test()
File "process_input.py", line 51, in test
word_dict["foo"] = word_dict["foo"].add("bang")
AttributeError: 'NoneType' object has no attribute 'add'
Run Code Online (Sandbox Code Playgroud)
如果我这样做:
word_dict = dict()
myset = set()
myset.add("bar")
word_dict["foo"] = myset
myset.add("bang")
word_dict["foo"] = myset
for key, value in word_dict:
print key,
print value
Run Code Online (Sandbox Code Playgroud)
我明白了:
Traceback (most recent call last):
File "process_input.py", line 61, in <module>
test()
File "process_input.py", line 58, in test
for key, value in word_dict:
ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)
关于如何强迫Python做我喜欢的任何提示?我是一个中级Python用户(或者我想,直到我遇到这个问题.)
sth*_*sth 28
set.add()
不会返回一个新的set
,它会修改set
它被调用.用这种方式:
word_dict = dict()
word_dict["foo"] = set()
word_dict["foo"].add("baz")
word_dict["foo"].add("bang")
Run Code Online (Sandbox Code Playgroud)
此外,如果您使用for
循环迭代dict,则迭代键:
for key in word_dict:
print key, word_dict[key]
Run Code Online (Sandbox Code Playgroud)
或者你可以迭代word_dict.items()
或word_dict.iteritems()
:
for key, value in word_dict.items():
print key, value
Run Code Online (Sandbox Code Playgroud)
Jon*_*erg 26
from collections import defaultdict
word_dict = defaultdict(set)
word_dict['banana'].add('yellow')
word_dict['banana'].add('brown')
word_dict['apple'].add('red')
word_dict['apple'].add('green')
for key,values in word_dict.iteritems():
print "%s: %s" % (key, values)
Run Code Online (Sandbox Code Playgroud)
当你说word_dict["foo"].add("baz")
,你正在将'baz'添加到set word_dict ["foo"]中.
函数返回None
- 更新集合是副作用.所以
word_dict["foo"] = word_dict["foo"].add("baz")
Run Code Online (Sandbox Code Playgroud)
最终将word_dict["foo"]
到None
.
只是word_dict["foo"].add("baz")
这是正确的.
在第二种情况下,当你说
for key, value in word_dict:
Run Code Online (Sandbox Code Playgroud)
您遇到错误,因为正确的语法是
for key in word_dict:
Run Code Online (Sandbox Code Playgroud)
只是键入循环word_dict
.在这种情况下,你想要
for key,value in word_dict.iteritems():
Run Code Online (Sandbox Code Playgroud)
代替.