如何向密钥添加多个列表?

时间:2015-08-03 13:32:35

标签: python python-3.x dictionary

我有这个:

{'Sleep': ['Bed', 'Sheets', 'Warm', 'TV', 'Computer', 'Phone']}

但我想要这个:

{'Sleep': [['Bed', 'Sheets', 'Warm'], ['TV', 'Computer', 'Phone']]}

我尝试过使用:

def func():
    for element in data:
        if element[1] in b:
            b[element[1]].append([element[0], element[2], element[3], element[4], element[5]]) 
        else:
            b[element[1]] = [element[0], element[2], element[3], element[4], element[5]]

我也尝试过.extend()b[element[1] +=代替.append() 但它正在回归追加:

{'Sleep': ['Bed', 'Sheets', 'Warm', ['TV', 'Computer', 'Phone']]}

然后返回+ =:

{'Sleep': ['Bed', 'Sheets', 'Warm', 'TV', 'Computer', 'Phone']}

我理解为什么他们会以这种方式返回,但我不知道如何将这些列表分开。所以,我的问题是如何将列表分开?

3 个答案:

答案 0 :(得分:1)

每个键不能有多个值,不能。

可以创建一个包含现有列表的新列表,并将其设为值:

def func():
    for element in data:
        if element[1] in b:
            b[element[1]].append([element[0], element[2], element[3], element[4], element[5]]) 
        else:
            b[element[1]] = [[element[0], element[2], element[3], element[4], element[5]]]

请注意,当密钥不存在时,我们会添加嵌套列表。

现在产生:

{'Sleep': [['Bed', 'Sheets', 'Warm'], ['TV', 'Computer', 'Phone']]}

你可以使用dict.setdefault() method而不是在这里测试包容,也许还有一些切片来建立一个新列表:

def func():
    for element in data:
        b.setdefault(element[1], []).append([element[:1] + element[2:]) 

dict.setdefault()或者返回给定键的值,或者如果缺少键,则将第二个参数添加为该键的值,然后返回该值。

答案 1 :(得分:1)

首先,您需要创建一个空列表作为字典值:

d = {'Sleep': []}

然后,添加您希望它包含的列表:

item_one = ['Bed', 'Sheets', 'Warm']
d['Sleep'].append(item_one)

item_two = ['TV', 'Computer', 'Phone']
d['Sleep'].append(item_two)

包装成功能:

def add_list_to_dict(to_dict, key, item):
    if key not in to_dict.keys():
        to_dict[key] = []
    to_dict[key].append(item)

# usage:
add_list_to_dict(d, 'Sleep', item_one)
add_list_to_dict(d, 'Sleep', item_two)

或者像这样,使用args:

def add_list_to_dict(to_dict, key, *items):
    if key not in to_dict.keys():
        to_dict[key] = []
    for item in items:
        to_dict[key].append(item)

# usage:
add_list_to_dict(d, 'Sleep', item_one, item_two)

答案 2 :(得分:0)

如果您使用相同的密钥,则无法将列表分开。字典与关键值(健康值)对一起使用。有两个不同阵列的关键点是不可能的。可以做的是在字典中有一个字典,如:

{ "key1": { "0": [1, 2...], "1": [44, 55...] } }