当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python Records List转Segregated Dictionary用法及代码示例


有时,在处理 Python 记录时,我们可能会遇到一个问题,需要将元组记录的每个元素转换为字典中的单独键,每个索引具有不同的值。此类问题可以在数据领域中应用。让我们讨论执行此任务的某些方法。

方法#1:使用循环:这是解决这个问题的方法之一。在此,我们迭代元组列表,并将所需的值分配给新构造的字典的每个键。

Python3


# Python3 code to demonstrate working of
# Convert Records List to Segregated Dictionary
# Using loop
# initializing list
test_list = [(1, 2), (3, 4), (5, 6)]
# printing original list
print("The original list is : " + str(test_list))
# initializing index value
frst_idx = "Gfg"
scnd_idx = 'best'
# Convert Records List to Segregated Dictionary
# Using loop
res = dict()
for sub in test_list:
    res[sub[0]] = frst_idx
    res[sub[1]] = scnd_idx
# printing result
print("The constructed Dictionary list : " + str(res))
输出
The original list is : [(1, 2), (3, 4), (5, 6)]
The constructed Dictionary list : {1: 'Gfg', 2: 'best', 3: 'Gfg', 4: 'best', 5: 'Gfg', 6: 'best'}

时间复杂度:O(n):因为它使用循环来迭代输入列表中的每个元素,其中 n 是列表的长度。
辅助空间:O(n):因为它创建了一个包含 n 个键值对的字典,其中 n 是输入列表的长度。相比之下,输入列表和程序中使用的其他变量所需的空间可以忽略不计。

方法#2:使用zip() + chain() + cycle() + 列表理解

上述函数的组合可用于执行此任务。在此,我们使用chain()解压值,然后交替循环要初始化的值,然后使用zip()方法压缩回值。

Python3


# Python3 code to demonstrate working of 
# Convert Records List to Segregated Dictionary
# Using zip() + chain() + cycle() + list comprehension
from itertools import chain, cycle
# initializing list
test_list = [(1, 2), (3, 4), (5, 6)]
# printing original list
print("The original list is : " + str(test_list))
# initializing index value
frst_idx = "Gfg"
scnd_idx = 'best'
# Convert Records List to Segregated Dictionary
# Using zip() + chain() + cycle() + list comprehension
res = dict(zip(chain(*test_list), cycle([frst_idx, scnd_idx])))
# printing result 
print("The constructed Dictionary list : " + str(res))
输出
The original list is : [(1, 2), (3, 4), (5, 6)]
The constructed Dictionary list : {1: 'Gfg', 2: 'best', 3: 'Gfg', 4: 'best', 5: 'Gfg', 6: 'best'}

时间复杂度:在)
辅助空间:在)

方法#3:使用字典理解

This method uses dictionary comprehension to create the final dictionary. It iterates through the tuples in the test_list and uses the zip() function to combine the tuple values with the index values [frst_idx, scnd_idx]. The resulting tuples are then used to create key-value pairs in the final dictionary.

Python3


# initializing list
test_list = [(1, 2), (3, 4), (5, 6)]
# initializing index value
frst_idx = "Gfg"
scnd_idx = 'best'
# Convert Records List to Segregated Dictionary
# Using dictionary comprehension
res = {num: idx for sub in test_list for num, idx in zip(sub, [frst_idx, scnd_idx])}
# printing result 
print("The constructed Dictionary list : " + str(res)) 
输出
The constructed Dictionary list : {1: 'Gfg', 2: 'best', 3: 'Gfg', 4: 'best', 5: 'Gfg', 6: 'best'}

该代码的时间复杂度为 O(n),其中 n 是输入列表 test_list 的长度,因为我们需要遍历列表中的每个元素一次。

该代码的辅助空间复杂度也是 O(n),因为我们需要在结果字典中存储 n 个键值对。

方法 4:使用 map() 函数和 lambda 函数。

Use map() function along with a lambda function to create two dictionaries, one for the first index value and another for the second index value. The lambda function takes a record as an argument and returns a tuple with the key-value pair. Then convert the resulting map objects into dictionaries and update the first dictionary with the second one. Finally, get the desired dictionary that is segregated by the index values.

Python3


# initializing list
test_list = [(1, 2), (3, 4), (5, 6)]
# initializing index value
frst_idx = "Gfg"
scnd_idx = 'best'
# Convert Records List to Segregated Dictionary
# Using map() and lambda function
res = dict(map(lambda x: (x[0], frst_idx), test_list))
res.update(dict(map(lambda x: (x[1], scnd_idx), test_list)))
# printing result 
print("The constructed Dictionary list : " + str(res))
输出
The constructed Dictionary list : {1: 'Gfg', 3: 'Gfg', 5: 'Gfg', 2: 'best', 4: 'best', 6: 'best'}

时间复杂度:O(n),其中 n 是输入列表 test_list 的长度。
辅助空间:O(n),其中n是输入列表test_list的长度。

方法5:使用setdefault()方法

Uses the setdefault() method to set the value of a key in the dictionary if it doesn’t already exist. If the key already exists, the method simply returns the existing value. This allows us to avoid overwriting any values that may have been set earlier in the loop.

  1. 初始化一个空字典 res。
  2. 循环遍历输入列表test_list中的每个元组子。
  3. 对于每个元组,使用字典 res 的 setdefault() 方法将元组的第一个元素的值设置为字典中的键。该键的值将是frst_idx 的值。
  4. 再次使用字典res的setdefault()方法将元组的第二个元素的值设置为字典中的键。该键的值将是scnd_idx 的值。
  5. 继续循环,直到处理完test_list中的所有元组。
  6. 打印结果字典 res。

Python3


# Python3 code to demonstrate working of 
# Convert Records List to Segregated Dictionary
# Using dictionary setdefault()
# initializing list
test_list = [(1, 2), (3, 4), (5, 6)]
# initializing index value
frst_idx = "Gfg"
scnd_idx = 'best'
# Convert Records List to Segregated Dictionary
# Using dictionary setdefault()
res = {}
for sub in test_list:
    res.setdefault(sub[0], frst_idx)
    res.setdefault(sub[1], scnd_idx)
# printing result 
print("The constructed Dictionary list : " + str(res))
输出
The constructed Dictionary list : {1: 'Gfg', 2: 'best', 3: 'Gfg', 4: 'best', 5: 'Gfg', 6: 'best'}

时间复杂度:
该方法的时间复杂度为在),其中 n 是输入列表 test_list 的长度,因为我们仅迭代列表中的每个元素一次。

辅助空间:
该方法的辅助空间复杂度为在),其中 n 是输入列表 test_list 的长度,因为我们正在创建一个字典,其中列表中的每个元素都有一个键值对。

方法 6:使用 functools 模块中的 reduce() 函数。

脚步

从 functools 模块导入 reduce() 函数。
定义一个函数,例如 segregate_dict,它接受两个参数 - 字典和元组。
对于每个元组,获取第一个和第二个元素并将它们分别分配给变量 num 和 idx。
使用键值对 (num, frst_idx) 和 (idx, scnd_idx) 更新字典。
返回更新后的字典。
使用reduce() 函数将segregate_dict 函数应用于test_list 中的每个元组。
打印最终的词典。

Python3


from functools import reduce
# initializing list
test_list = [(1, 2), (3, 4), (5, 6)]
# initializing index value
frst_idx = "Gfg"
scnd_idx = 'best'
# Define a function to segregate dictionary
def segregate_dict(dict_, tup):
    num, idx = tup
    dict_.update({num: frst_idx, idx: scnd_idx})
    return dict_
# Using reduce() function to apply the function to each tuple in the list
res = reduce(segregate_dict, test_list, {})
# printing result 
print("The constructed Dictionary list : " + str(res))
输出
The constructed Dictionary list : {1: 'Gfg', 2: 'best', 3: 'Gfg', 4: 'best', 5: 'Gfg', 6: 'best'}

时间复杂度:O(n),其中 n 是test_list 中的元组数量。
辅助空间:O(n),其中n是test_list中的元组数量。



相关用法


注:本文由纯净天空筛选整理自manjeet_04大神的英文原创作品 Python – Convert Records List to Segregated Dictionary。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。