将字符串映射到一组字符串的Python字典?

2024-10-03 02:48:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够制作一个Python字典,字符串作为键,字符串集作为值。E、 g.:{ "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")

我得到:

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'

如果我这样做:

  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

我得到:

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

关于如何强迫Python做我想做的事情有什么建议吗?我是一个中间的Python用户(或者我是这么想的,直到遇到这个问题)


Tags: keyinpytestaddinputfoovalue
3条回答
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)

set.add()不返回新的set,它修改调用它的set。这样使用:

word_dict = dict()
word_dict["foo"] = set()
word_dict["foo"].add("baz")                                    
word_dict["foo"].add("bang")

另外,如果您使用for循环来迭代dict,那么您是在迭代键:

for key in word_dict:
   print key, word_dict[key]

或者,您可以遍历word_dict.items()word_dict.iteritems()

for key, value in word_dict.items():
   print key, value

当你说word_dict["foo"].add("baz")时,你是在把'baz'添加到设置单词“foo”中。

函数返回None——更新集合是一个副作用。所以

word_dict["foo"] = word_dict["foo"].add("baz") 

最终将word_dict["foo"]设置为None

只要word_dict["foo"].add("baz")就可以了。

在第二种情况下,当你说

for key, value in word_dict:                                                       

因为正确的语法是

for key in word_dict: 

只循环word_dict中的键。在这种情况下,你想要

for key,value in word_dict.iteritems(): 

相反。

相关问题 更多 >