如何创建每个键具有多个值的字典?

时间:2021-06-05 05:03:05

标签: python python-3.x dictionary

我想以键值列表的形式创建一个包含多个值的字典(准确地说是键“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]}

3 个答案:

答案 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 中的所有值都会有嵌套列表,如果您只想对具有多个值的键进行嵌套列表,您可以先检查该键是否存在。

相关问题