簡體   English   中英

如何創建每個鍵具有多個值的字典?

[英]How to create a dictionary with multiple values per key?

我想以鍵值列表的形式創建一個包含多個值的字典(准確地說是鍵'0')。但是當我使用 zip function 時,它只給出該鍵的最后更新值附加到該鍵的所有值。 下面是代碼

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)

Output 來自上述代碼:

{0: [2, 2], 1: [1, 0], 2: [2, 0], -1: [2, 1]}

所需 Output:

{0: [[0, 0],[0, 1],[0, 2],[1, 1],[1, 2],[2, 2]], 1: [1, 0], 2 : [2, 0], -1: [2, 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)

這將 output: {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]]}

假設您想將 '[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。 -> 我不推薦它。 因為它很難解析

如果您不想使用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]})

OUTPUT

{0: [[0, 0], [0, 1], [0, 2], [1, 1], [1, 2], [2, 2]], 1: [[1, 0]], 2: [[2, 0]], -1: [[2, 1]]}

Output 中的所有值都會有嵌套列表,如果您只想對具有多個值的鍵進行嵌套列表,您可以先檢查該鍵是否存在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM