将列表附加到字典以获取嵌套列表

时间:2018-03-27 17:59:32

标签: python python-3.x list dictionary nested-lists

我一直在试图弄清楚如何将字典添加到字典中,并在字典值中获得嵌套列表。这是一个虚拟代码作为例子:

IN:

pets = dict()
pets['cat'] = list(['stray','brown','big'])
new_val = list(['house','white','small'])
pets['cat'].append(new_val)
print(pets)

OUT:
{'cat': ['stray', 'brown', 'big', ['house', 'white', 'small']]}

我试图获取两个列表的列表:

{'cat': [['stray', 'brown', 'big'], ['house', 'white', 'small']]}

4 个答案:

答案 0 :(得分:2)

在我看来,最简洁的方法是将值实例化为空列表。然后按顺序追加列表。

as any as Observable<void>

如果您经常这样做,请使用pets = {} pets['cat'] = [] old_val = ['stray','brown','big'] pets['cat'].append(old_val) new_val = ['house','white','small'] pets['cat'].append(new_val) ,这样您就不必手动实例化密钥和空列表:

collections.defaultdict

结果:

from collection import defaultdict

pets = defaultdict(list)

old_val = ['stray','brown','big']
pets['cat'].append(old_val)

new_val = ['house','white','small']
pets['cat'].append(new_val)

答案 1 :(得分:1)

您的主要问题是您没有将pets["cat"]创建为二维列表。所以最小的可行修复是改变

list(['stray','brown','big'])

list([['stray','brown','big']]) 

但你真的不需要list([...])。这种方法基本上可以将传递的任何内容转换为类型&#34; list。&#34;由于您已经使用[]创建了一个列表,因此您无需致电list()。结果是将列表转换为列表,因此它只返回列表。您可以查看是否list(pets),您获得了词典键的列表。这就是字典转换为列表的方式(删除值并从键中删除列表)。如果您传递一个字符串,它会创建一个包含该字符串的列表。如果你没有传递任何东西,它会创建一个空列表。

所以:

pets['cat'] = list(['stray','brown','big'])
new_val = list(['house','white','small'])

应该是

pets['cat'] = [['stray','brown','big']]
new_val = ['house','white','small']

OUT:

{'cat': [['stray', 'brown', 'big'], ['house', 'white', 'small']]}

答案 2 :(得分:0)

这是一个可能的抽象,也使用defaultdict

<强>代码

import collections as ct


def append_lists(key, *iterables, defaultdict_=None):
    """Return a dict of lists."""
    if defaultdict_ is None:
        dd = ct.defaultdict(list)
    else:
        dd = defaultdict_.copy()

    for lst in iterables:
        dd[key].extend(lst)
    return dd

<强>演示

根据列表和可迭代列表构建列表的字典:

lists = ["stray", "brown", "big"], ["house", "white", "small"]

d = append_lists("cat", lists)
d
# defaultdict(list,
#             {'cat': [['stray', 'brown', 'big'], ['house', 'white', 'small']]})

继续向原始字典添加条目:

append_lists("dog", [["big", "wide", "yellow"]], defaultdict_=d)
# defaultdict(list,
#             {'cat': [['stray', 'brown', 'big'], ['house', 'white', 'small']],
#              'dog': [['big', 'wide', 'yellow']]})

注意,保留原始字典:

d
# defaultdict(list,
#             {'cat': [['stray', 'brown', 'big'], ['house', 'white', 'small']]})

最后,我们可以从简单的键和项目列表构建:

animals = ["mouse", "bird"]
features = (
    [["small", "brown", "cute"], ["small", "white", "fast"]], 
    [["large", "black", "fast"]]
)

result = ct.defaultdict(list)
for k, items in zip(animals, features):
    result = append_lists(k, items, defaultdict_=result)

result
# defaultdict(list,
#             {'bird': [['large', 'black', 'fast']],
#              'mouse': [['small', 'brown', 'cute'],
#               ['small', 'white', 'fast']]})

答案 3 :(得分:0)

您也可以尝试这种方法:

list_1=[['stray','brown','big'],['house','white','small']]

key='cat'
dict_1={}
for i in list_1:
    if key not in dict_1:
        dict_1[key]=[i]
    else:
        dict_1[key].append(i)
print(dict_1)

输出:

{'cat': [['stray', 'brown', 'big'], ['house', 'white', 'small']]}