我正在嘗試將串列串列的元素添加到字典的值中。
我創建了一個串列,其中包含來自檔案的元素,如下所示:
list_of_lists = [[966], [1513, 2410], [2964, 1520, 604]....]
我正在嘗試將此串列添加到我制作的字典中,如下所示:
{'Youngstown': ['OH', 4110, 8065, 115436], 'Yankton': ['SD', 4288, 9739,
12011], 'Yakima': ['WA', 4660, 12051, 49826]....]
我嘗試了以下代碼:
x = 1
for x in d2.values():
d2.append(list_of_list)
print(d2)
我什至不確定這是否可行,但我試圖讓字典成為:
{'Youngstown': ['OH', 4110, 8065, 115436], 'Yankton': ['SD', 4288, 9739,
12011, [966]], 'Yakima': ['WA', 4660, 12051, 49826, [1513, 2410]]....]
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
我知道有更多的方法可以做到這一點,但我認為這是更具可讀性和可理解性的代碼。
list_of_lists = [[966], [1513, 2410], [2964, 1520, 604]]
dict_ = {'Youngstown': ['OH', 4110, 8065, 115436], 'Yankton': ['SD', 4288, 9739,
12011], 'Yakima': ['WA', 4660, 12051, 49826]}
i = 0
# list(dict_.items())[1:] is the list of all keys and values except first one.
for key,value in list(dict_.items())[1:]:
dict_[key] = value [list_of_lists[i]]
i =1
print(dict_)
uj5u.com熱心網友回復:
你做x = 1,然后你馬上做for x in d2.values()。這將覆寫x的每個元素d2.values()。如果要從 中的第二項開始,則d2.values()需要創建一個迭代器并跳過第一個值:
d2_iter = iter(d2.values())
next(d2_iter) # Consume one element
for item in d2_iter: # Iterate over the remaining iterator
# Do what you want here.
另一個問題是您將整個串列串列附加到. d2不要那樣做。而是使用同時zip()迭代串列串列和值d2
d2_iter = iter(d2.values())
next(d2_iter) # Consume one element
for item_from_dict, item_to_append in zip(d2_iter, list_of_lists):
item_from_dict.append(item_to_append)
這給你留下了:
{'Youngstown': ['OH', 4110, 8065, 115436],
'Yankton': ['SD', 4288, 9739, 12011, [966]],
'Yakima': ['WA', 4660, 12051, 49826, [1513, 2410]]}
請注意,像這樣的附加僅有效,因為串列是可變的。如果您有一個像元組這樣的不可變型別作為 的值d2,則必須創建一個新元組并將其分配給鍵:
d3 = {'Youngstown': ('OH', 4110, 8065, 115436), 'Yankton': ('SD', 4288, 9739, 12011), 'Yakima': ('WA', 4660, 12051, 49826)}
d3_iter = iter(d2.keys())
next(d3_iter) # Consume one element
for key_from_dict, item_to_append in zip(d3_iter, list_of_lists):
new_item = d3[key_from_dict] (item_to_append,) # Create a new item
d3[key_from_dict] = new_item
你會得到
{'Youngstown': ('OH', 4110, 8065, 115436),
'Yankton': ('SD', 4288, 9739, 12011, [966]),
'Yakima': ('WA', 4660, 12051, 49826, [1513, 2410])}
uj5u.com熱心網友回復:
您可以使用itertools.islice()跳過第一個元素,然后使用zip()將每個串列值與要附加的串列配對:
from itertools import islice
for lst_value, lst_to_append in zip(islice(d2.values(), 1, None), list_of_lists):
lst_value.append(lst_to_append)
print(d2)
這輸出:
{
'Youngstown': ['OH', 4110, 8065, 115436],
'Yankton': ['SD', 4288, 9739, 12011, [966]],
'Yakima': ['WA', 4660, 12051, 49826, [1513, 2410]]
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/469275.html
上一篇:從字典陣列中檢索值
