我正在尝试创建一个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,说它只能包含字母数字字符和下划线。所以
如何创建包含元组的字典键?
如何有效地使用字典键(尤其是元组它) 包含)从字典中检索信息?
答案 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'