我正在制作一个目前包含单词和短语的字典(假设一个短语不能在同一个字符串中,因为它们不能在这里承担我的责任)。长话短说,如何在字典中创建一个包含多个字符串的键?我尝试在两个字符串之间使用“和”,但它似乎删除了键和值作为一个整体。
编辑:好的,事后来看,我对发生的事情并不是很清楚。以下是发生的事情:
def execute(text):
dic1 = {
"some word": 1,
"another word":1,
"hello" + "world": 5 ##this is what i attempted
}
当我打印出“hello”+“world”键时,它的关键是“helloworld”,这不是我想要的。我希望密钥是两个字符串。我试图用“和”替换+,但它完全删除了键。 (通过这个,我的意思是它会用列表中的下一个替换这个键)。基本上,我如何使密钥由两个字符串组成,以便我可以将其用于其他目的?
答案 0 :(得分:0)
如果您希望某个键包含多个值,则需要使用序列。有人可能会尝试使用list()
,但你不能。它们是可变的。您需要使用tuple()
代替 不可变 - 或者不可变。
>>> # list are mutable, which means they cannot be used
>>> # as keys in a dictionary.
>>> {[]:''}
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
{[]:''}
TypeError: unhashable type: 'list'
>>> # you need to use tuples instead, which
>>> # are not mutable.
>>> {():''}
{(): ''}
>>> {('a', 'b'):'c'}
{('a', 'b'): 'c'}
>>>
Python词典的文档也说明了这一点:
如果元组只包含字符串,数字或元组,则它可以用作键;如果元组直接或间接包含任何可变对象,则不能将其用作键。您不能将列表用作键,因为可以使用索引分配,切片分配或
append()
和extend()
等方法对列表进行适当修改。
答案 1 :(得分:0)
单个dict
项目不能有两个键。因此,如果您需要两个键来访问相同的值,您必须创建两个项目,每个项目一个。例如,
dic1 =
{
"some word": 1,
"another word": 1,
"hello": 5,
"world": 5,
}
请注意,如果您执行类似
的操作a = ["some", "data"]
dic1 = {"key1": a, "key2": a}
a.append("words")
然后dic1["key1"]
和dic1["key2"]
都会检索["some", "data", "words"]
,因为这两个键都与同一个列表相关联。
如果你需要键是某种词,你可以使用元组作为键,如叶子的答案所示。另一种选择是使用frozensets作为密钥 - 这样做的好处是frozenset(["hello", "world"])
等于frozenset(["world", "hello"])
,因此在查找项目时,单词顺序并不重要。