python - 未正确创建具有元组值的字典
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python - 未正确创建具有元组值的字典相关的知识,希望对你有一定的参考价值。
我读过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件不是三件。
答案
set()
从迭代中获取值并分别添加每个值。你传入了一个元组,它是一个带有两个值的迭代。
如果你想添加元组本身,你需要将它包装在一个iterable中,如列表:
set([("1111","test1")])
在Python 3中,您可以使用集合显示来创建新集:
{("1111","test1")}
集合显示采用逗号分隔的元素,("1111", "test1")
是这里的一个元组元素。
在另一篇文章中,该集合是使用集合显示(所以{tuple1, tuple2, etc.}
)创建的,答案使用itertools
函数或generator expression来生成set()
函数处理的元组序列;两者都产生可迭代类型。
另一答案
你得到了答案,但我建议你改用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)
请注意这一点,我假设您的所有值都与您的键相对应。如果不是这种情况,请选择第一个。
以上是关于python - 未正确创建具有元组值的字典的主要内容,如果未能解决你的问题,请参考以下文章