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 - 未正确创建具有元组值的字典的主要内容,如果未能解决你的问题,请参考以下文章

元组数据结构支持 in 运算符吗

Swift 元组(Tuple)

[Python]-4-元组列表与字典

Python之字典

如何将元组值设置为熊猫数据框?

python按值的长度对字典进行排序