[英]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.