我正在尝试将列表的列表中的元素添加到字典的值中。
我已经从一个文件中创建了一个元素列表,看起来像这样:
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]]....]
我怎样才能做到这一点?
我知道有更多的方法可以做到这一点,但我认为这是更易于阅读和理解的代码。
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_)
先做x = 1
,然后马上做for x in d2.values()
。这将用d2.values()
的每个元素覆盖x
。如果您想从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])}
您可以使用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]]
}