在Python中可以将列表中的元素添加到字典的值中吗?



我正在尝试将列表的列表中的元素添加到字典的值中。

我已经从一个文件中创建了一个元素列表,看起来像这样:

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]]
}

相关内容

  • 没有找到相关文章

最新更新