我一直在试图弄清楚如何将字典添加到字典中,并在字典值中获得嵌套列表。这是一个虚拟代码作为例子:
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']]}
答案 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']]}