python - 未正确创建具有元组值的字典

问题描述 投票:1回答:2

我读过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件不是三件。

python set tuples
2个回答
5
投票

set()从迭代中获取值并分别添加每个值。你传入了一个元组,它是一个带有两个值的迭代。

如果你想添加元组本身,你需要将它包装在一个iterable中,如列表:

set([("1111","test1")])

在Python 3中,您可以使用集合显示来创建新集:

{("1111","test1")}

集合显示采用逗号分隔的元素,("1111", "test1")是这里的一个元组元素。

在另一篇文章中,该集合是使用集合显示(所以{tuple1, tuple2, etc.})创建的,答案使用itertools函数或generator expression来生成set()函数处理的元组序列;两者都产生可迭代类型。


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)

请注意这一点,我假设您的所有值都与您的键相对应。如果不是这种情况,请选择第一个。

© www.soinside.com 2019 - 2024. All rights reserved.