传递String,integer和tuple信息作为python字典的关键

时间:2015-02-09 17:32:35

标签: python dictionary tuples namedtuple

我正在尝试创建一个python字典,我想使用包含字符串,数字和字母的键。列表/元组条目。理想情况下,键应该是

("stringA", "stringB", "stringC", integer1, (integer2, integer3, integer4))

我尝试根据此documentation创建一个namedtuple,如下所示

from collections import namedtuple
dictKey = namedtuple('dictKey', 'stringA stringB stringC integer1 
                      (integer2 integer3 integer4)')

但它抛出一个ValueError,说它只能包含字母数字字符和下划线。所以

  1. 如何创建包含元组的字典键?

  2. 如何有效地使用字典键(尤其是元组它) 包含)从字典中检索信息?

1 个答案:

答案 0 :(得分:2)

这里的问题是你的namedtuple定义,而不是字典键结构本身,它可以很好地工作,例如:

>>> d = {}
>>> d[('1', '2', 3, (4, 5))] = 'foo'
>>> d
{('1', '2', 3, (4, 5)): 'foo'}

namedtuple读取field_names参数时,它认为您正在尝试创建名为(integer2的字段,并且没有意识到您将其视为嵌套{ {1}}。

要在tuple中定义该结构,您必须拥有一个本身为namedtuple的属性:

tuple

您可以使用原始>>> from collections import namedtuple >>> dictKey = namedtuple("dictKey", "stringA stringB stringC integer1 tuple1") >>> key = dictKey("foo", "bar", "baz", 1, (2, 3, 4)) >>> d[key] = 'bar' >>> d {dictKey(stringA='foo', stringB='bar', stringC='baz', integer1=1, tuple1=(2, 3, 4)): 'bar', ('1', '2', 3, (4, 5)): 'foo'}

完全按照其他任何方式检索存储在键上的值
namedtuple

或新的:

>>> d[key]
'bar'