好吧我搜查了,但是我找不到我的具体问题的答案。我正在创建一个列表字典。我有while循环创建一些值列表以及与之关联的名称:
dict = {}
list = [1, 2]
name = key1
list = [3, 4]
name = key1
如果名称相同,则列表将附加到密钥的现有值集。这是我的代码:
if key in dict:
dict[key].append(list)
else:
dict[key] = list
这是我想要的输出:
dictionary = {'key1':[1,2],[3,4]}
但是我一直得到这个输出:
dictionary = {'key1':[1,2,[3,4]]}
其中键的第二个列表放在第一个列表中。
答案 0 :(得分:4)
这是一个非常常见的错误。我相当肯定你在做:
list1.append(list2)
相反,你想做:
list1.extend(list2)
但是,由于您需要[[1,2], [3,4]]
而非[1,2,3,4]
,因此您应该:
if key in d1:
d1[key].append(l1)
else:
d1[key] = [l1]
答案 1 :(得分:2)
这是因为您每次都会将列表附加到列表中。你需要使用extend。代码:
keys = ['name1', 'name2', 'name2', 'name1']
somelist = [1, 2, 3]
d = {}
for k in keys:
d.setdefault(k, []).extend(somelist)
答案 2 :(得分:2)
您需要一个列表实际上,您的输出将如下所示:
字典= {' key1':[[1,2],[3,4]]}
要使用与多个值相关联的键,您可以使用以下行:
dictionary.setdefault(key, []).append(a_list)
如果您的词典中没有该键, setdefault会将该键与默认值[]
相关联。
另外,您应该避免使用dict
或list
来定义自己的变量,它们是built-in
,您正在重新定义它们。
<强> 修改 强>
为了让读者明白这可能会有所帮助,它是一个交互式python会话的输出:
>>> d = {}
>>> d.setdefault('key1', []).append([1, 2])
>>> d.setdefault('key1', []).append([3, 4])
>>> d
{'key1': [[1, 2], [3, 4]]}
答案 3 :(得分:1)
我希望不要误解,因为词典= {&#39; key1&#39;:[1,2],[3,4]}表达不佳
def add2dict(d, l, k):
if not k in d:
dict[k] = []
d[k].append(l)
dict = {}
add2dict(dict, [1,2], "key1")
add2dict(dict, [3,4], "key1")
导致dict:
{&#39; key1&#39;:[[1,2],[3,4]]}