Python词典 - 如何防止新值覆盖以前的值?

时间:2011-01-30 08:12:29

标签: python nested dictionary

我想创建一个名为“First”的词典(如名字一样),它将存储许多名字,这些名字都是通过函数存储在词典中的。这个想法是字典可以支持多个名称,

所以这是我的问题:

当我在字典中添加名称时,我会通过该函数添加第二个名称,之前的名称将被最后一个名称覆盖。我该如何修补?我知道它涉及字典中的字典或嵌套条件。这是我的代码:

def store(data,value):
    data['Names'] = {}
    data['Names']['first'] = {}
    data['Names']['first'] = {value}

4 个答案:

答案 0 :(得分:4)

在列表中转动data['Names']['first']并附加到其中:

data['Names'] = {}
data['Names']['first'] = []

def store(data, value):
    data['Names']['first'].append(value)

答案 1 :(得分:2)

Python< 2.5没有defaultdict,但是你也可以用普通的dict来实现同样的目的。

>>> names = {}
>>> name_list = [('Jon', 'Skeet'), ('Jeff', 'Atwood'), ('Joel', 'Spolsky')]
>>> for first, last in name_list:
        names.setdefault('first', []).append(first)
        names.setdefault('last', []).append(last)
>>> print names
{'first': ['Jon', 'Jeff', 'Joel'], 'last': ['Skeet', 'Atwood', 'Spolsky']}
如果密钥已存在于dict中,

setdefault将返回现有值,或者如果密钥不存在,则设置新值并返回新设置的值。

答案 2 :(得分:1)

看看collections.defaultdict。然后你可以做以下事情:

from collections import defaultdict

data['Names'] = defaultdict(list) # Or pass set instead of list.
data['Names']['first'].append("Bob")
data['Names']['first'].append("Jane")
data['Names']['last'].extend("T", "Mart")

答案 3 :(得分:0)

您应该将名称列表存储为列表,而不是字典。所以你会:

data['Names'] = {}
data['Names']['first'] = [] #note the brackets here instead of curlies
data['Names']['first'] = [value1, value2]

要在实例化后添加一个,您可以执行以下操作:

data['Names']['first'].append(another_first_name)

列表是零索引的,因此要获得第一个名字,您可以说:

data['Names']['first'][0]