我已阅读this但似乎对我不起作用 -
>>> dict = {}
>>> dict[ "a" ] = set(("1111","test1"))
>>> dict
{'a': set(['1111', 'test1'])}
>>> dict[ "a" ].add( ("2222","test2"))
>>> dict
{'a': set(['1111', 'test1', ('2222', 'test2')])}
我也期待第一个看起来像一个元组 - 为什么会分裂?
我想做什么:
>>> for key,val_set in dict.items() :
... for val in val_set :
... print val
...
1111
test1
('2222', 'test2')
打印2件不是3件。
答案 0 :(得分:5)
set()
获取可迭代中的值,并分别添加每个值。你传入了一个元组,它是一个带有两个值的迭代。
如果你想添加元组本身,你需要将它包装在一个iterable中,如列表:
set([("1111","test1")])
在Python 3中,您可以使用集合显示来创建新集:
{("1111","test1")}
集合显示采用逗号分隔的元素,("1111", "test1")
是这里的一个元组元素。
在另一篇文章中,该集是使用集合显示创建的(所以{tuple1, tuple2, etc.}
)并且答案使用itertools
函数或generator expression来生成元组序列要处理的set()
函数;两者都产生一个可迭代的类型。
答案 1 :(得分:2)
您已得到答案,但我建议您使用defaultdict。所有这些类型的案例(例如[(" 1111"," test1")])都得到妥善处理。您也不必担心初始化。
试试这个。
from collections import defaultdict
s = defaultdict(set)
s["a"].add(("pw", "sq"));
s["a"].add(("wq", "qq"));
s["a"].add(("aa", "bb"));
for k, v in s.items():
print (k)
for g in v:
print (g)
请注意这一点,我假设你的所有价值都与你的钥匙相对应。 如果不是这种情况,请选择第一个。