當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。