📜  Python|为列表中的每个唯一值分配 id

📅  最后修改于: 2022-05-13 01:54:22.436000             🧑  作者: Mango

Python|为列表中的每个唯一值分配 id

有时,在 Web 开发领域或竞争性编程中工作时,我们需要为每个不同的值分配一个唯一的 id,以跟踪它在计数或任何其他所需用例中的出现。让我们讨论可以执行此任务的某些方式。

方法 #1:使用defaultdict + lambda + 列表推导

上述功能的组合可用于完成此特定任务。 defaultdict函数执行使用 lambda函数分配 Ids 的主要任务,它将当前键数分配给每个新键。列表推导在后期用于形成列表。

# Python3 code to demonstrate
# assigning ids to values
# using list comprehension + defaultdict + lambda
from collections import defaultdict
  
# initializing list
test_list = [5, 6, 7, 6, 5, 1]
  
# printing original list
print("The original list : " + str(test_list))
  
# using list comprehension + defaultdict + lambda
# assigning ids to values
temp = defaultdict(lambda: len(temp))
res = [temp[ele] for ele in test_list]
  
# print result
print("The ids of assigned values is : " + str(res))
输出 :
The original list : [5, 6, 7, 6, 5, 1]
The ids of assigned values is : [0, 1, 2, 1, 0, 3]

方法 #2:使用OrderedDict.fromkeys() + enumerate() + 列表理解

此方法执行与上述方法类似的任务。在这个 orderedDict.fromkeys函数中执行删除重复项和枚举函数函数我们获取值的索引以将它们映射在一起。

# Python3 code to demonstrate
# assigning ids to values using 
# list comprehension + OrderedDict.fromkeys() + enumerate()
from collections import OrderedDict
  
# initializing list
test_list = [5, 6, 7, 6, 5, 1]
  
# printing original list
print("The original list : " + str(test_list))
  
# using list comprehension + OrderedDict.fromkeys() + enumerate()
# assigning ids to values
res = [{val : key for key, val in enumerate(
           OrderedDict.fromkeys(test_list))}
                 [ele] for ele in test_list]
  
# print result
print("The ids of assigned values is : " + str(res))
输出 :
The original list : [5, 6, 7, 6, 5, 1]
The ids of assigned values is : [0, 1, 2, 1, 0, 3]