2012-03-18 107 views
0

我有一个关于python中的字典的问题,在参考页面:http://docs.python.org/tutorial/datastructures.html#dictionaries追加到Python的字典键值:

“你不能使用列表作为密钥,因为链表可以 代替使用索引分配,切片分配或方法进行修饰等 追加()和extend()”。

但是,追加python字典的值是什么意思?

# A simple program that keep track of the line number(s) a word appeared in the novel 
myDictionary = {} 
    with open('novel.txt') as book: 
     lineNumber = 1 
     for line in book: 
      # cleaned is a helper function to clean up the line 
      for word in cleaned(line).split(): 
       if word in myDictinoary: 
        myDictionary[word].append(lineNumber) 
       else: 
        myDiciontary[word]=[lineNumber] 
      lineNumber += 1 

myDictionary[word].append(lineNumber)究竟发生了什么?在我看来,列表中,我想确定,一个键的价值可以列表(或在这种情况下,它是一个元组)? 什么样的数据类型可以用作值?当我想要密钥存储多个值时。

+1

关于无法使用列表作为字典*键*的引用与您的文章的其余部分无关,即修改字典*值*。您不能使用可变对象(包括列表)作为关键字,因为更改关键字会破坏字典查找。你可以使用任何你想要的价值。 – 2012-03-18 05:20:19

+0

是的,我问的原因是因为我没有看到它隐含地告诉我“任何物体都可以用作价值”。它只是说什么不能用于钥匙,现在我想我明白了。 – George 2012-03-18 05:27:35

回答

1

myDictionary[word].append(lineNumber)将调用append()方法的任何值存储在myDIctionary[word]。如果该值恰好属于list类型,那么它将为该list附加一个值。

如果存储在myDictionary[word]列表,或实施append()另一个序列类型,则要求它append()将是AttributeException

+0

我看到了,我想我认为参考文献说这个值也不能是一个列表,我注意到有时当我忘记输入[lineNumber]并崩溃时,现在我想我知道为什么。 – George 2012-03-18 05:24:19

+0

是的,你必须初始化该值为一个列表。如果你尝试'mydict [word] = 1; mydict [word] .append(2)'这会引发一个'AttributeError',原因与1.append(2)会引发一个'AttributeError' - 整数没有'append()'方法。 – 2012-03-18 05:26:54

0

任何对象都可以用作dict中的值。包括list

0

任何东西都可以成为字典中的一个值,可以排列或不排列。该行在字典中扩展了一个值,而不是字典本身

+0

我认为参考页应该说:P(任何东西都可以是字典的值)。谢谢。 – George 2012-03-18 05:25:57