我想以键值列表的形式创建一个包含多个值的字典(准确地说是键“0”)。但是当我使用 zip 函数时,它只给出最后更新的值该键而不是附加到该键的所有值。 下面是代码。
values_list = [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
keys_list = [0,0,0,1,0,0,2,-1,0]
my_dict = dict(zip(keys_list, values_list))
print(my_dict)
以上代码的输出:
{0: [2, 2], 1: [1, 0], 2: [2, 0], -1: [2, 1]}
所需输出:
{0: [[0, 0],[0, 1],[0, 2],[1, 1],[1, 2],[2, 2]], 1: [1, 0 ], 2: [2, 0], -1: [2, 1]}
答案 0 :(得分:1)
正如所指出的,您询问的格式不是有效的python(因为它有没有键的条目),但我相信以下内容适合您:
values_list = [[0, 0], [0, 1], [0, 2], [1, 0], [1, 1], [1, 2], [2, 0], [2, 1], [2, 2]]
keys_list = [0,0,0,1,0,0,2,-1,0]
my_dict = {}
for value, key in zip(values_list, keys_list):
if key in my_dict:
my_dict[key].append(value)
else:
my_dict[key] = [value]
print(my_dict)
将输出:{0: [[0, 0, [0, 1], [0, 2], [1, 1], [1, 2], [2, 2]], [0, 1], [0, 2], [1, 1], [1, 2], [2, 2]], 1: [[1, 0]], 2: [[2, 0]], -1: [[2, 1]]}
答案 1 :(得分:0)
假设你想得到 '[0, 0],[0, 1],[0, 2]' 形式的值,这是不可能的。
你应该用列表或元组覆盖 [0, 0], [0, 1], [0, 2]。
列表 -> [ [0, 0], [0, 1], [0, 2] ] 元组 -> ( [0, 0], [0, 1], [0, 2] )
但是,您仍然希望保持这种形式,您可以将其设为 str。 -> 我不推荐它。因为会很难解析
答案 2 :(得分:0)
如果您不想使用 defaultdict
,您可以自己实现类似于 defaultdict
提供的功能:
不要直接从zip创建字典,而是迭代它并调用dict.get()
方法,默认值为空列表[]
,并遵循逻辑。
my_dict = dict()
for key,value in zip(keys_list, values_list):
my_dict.update({key: my_dict.get(key, [])+[value]})
输出:
{0: [[0, 0], [0, 1], [0, 2], [1, 1], [1, 2], [2, 2]], 1: [[1, 0]], 2: [[2, 0]], -1: [[2, 1]]}
Output 中的所有值都会有嵌套列表,如果您只想对具有多个值的键进行嵌套列表,您可以先检查该键是否存在。