Python|将元组列表转换为字典值列表
Python中数据类型相互转换的问题之一是将元组列表转换为字典,其中键是元组的第一个元素,它们被唯一标识为字典中的键,其对应的值作为各个键的对应值的列表作为元组的第二个元素。让我们讨论如何解决这个特定问题。
方法 #1:使用 defaultdict() + 循环
使用 defaultdict() 和循环可以轻松解决此问题。 defaultdict 提供了一个默认值字典容器来为键分配对应的值列表,这样我们就不需要用空列表来初始化键,并且使用循环从元组中提取相似的值。
# Python3 code to demonstrate working of
# Convert list of tuples to dictionary value lists
# Using defaultdict() + loop
from collections import defaultdict
# initializing list
test_list = [(1, 'gfg'), (1, 'is'), (2, 'best'), (3, 'for'), (4, 'CS')]
# printing original list
print("The original list is : " + str(test_list))
# Using defaultdict() + loop
# Convert list of tuples to dictionary value lists
res = defaultdict(list)
for i, j in test_list:
res[i].append(j)
# printing result
print("The merged dictionary is : " + str(dict(res)))
The original list is : [(1, ‘gfg’), (1, ‘is’), (2, ‘best’), (3, ‘for’), (4, ‘CS’)]
The merged dictionary is : {1: [‘gfg’, ‘is’], 2: [‘best’], 3: [‘for’], 4: [‘CS’]}
方法 #2:使用defaultdict() + groupby()
该方法执行与上述方法类似的任务,只是不使用循环访问每个键值对,这里我们使用 Python 的groupby
库将键与值分组,然后转换为列表。
# Python3 code to demonstrate working of
# Convert list of tuples to dictionary value lists
# Using defaultdict() + groupby()
from collections import defaultdict
from operator import itemgetter
from itertools import groupby
# initializing list
test_list = [(1, 'gfg'), (1, 'is'), (2, 'best'), (3, 'for'), (4, 'CS')]
# printing original list
print("The original list is : " + str(test_list))
# Using defaultdict() + groupby()
# Convert list of tuples to dictionary value lists
res = dict((k, [v[1] for v in itr]) for k, itr in groupby(
test_list, itemgetter(0)))
# printing result
print("The merged dictionary is : " + str(dict(res)))
The original list is : [(1, ‘gfg’), (1, ‘is’), (2, ‘best’), (3, ‘for’), (4, ‘CS’)]
The merged dictionary is : {1: [‘gfg’, ‘is’], 2: [‘best’], 3: [‘for’], 4: [‘CS’]}