Python字典在使用运算符

时间:2017-01-03 01:55:14

标签: python dictionary

我正在制作一个目前包含单词和短语的字典(假设一个短语不能在同一个字符串中,因为它们不能在这里承担我的责任)。长话短说,如何在字典中创建一个包含多个字符串的键?我尝试在两个字符串之间使用“和”,但它似乎删除了键和值作为一个整体。

编辑:好的,事后来看,我对发生的事情并不是很清楚。以下是发生的事情:

def execute(text):
    dic1 = {
        "some word": 1,
        "another word":1,
        "hello" + "world": 5 ##this is what i attempted
    }

当我打印出“hello”+“world”键时,它的关键是“helloworld”,这不是我想要的。我希望密钥是两个字符串。我试图用“和”替换+,但它完全删除了键。 (通过这个,我的意思是它会用列表中的下一个替换这个键)。基本上,我如何使密钥由两个字符串组成,以便我可以将其用于其他目的?

2 个答案:

答案 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"]),因此在查找项目时,单词顺序并不重要。