python - 我想将元组值添加到元组,如果该元组[0 :2] is repeated as shown below:

标签 python list tuples

这里我有列表

some_list = [('A','B','IP1','N1'),('A','B','IP3','N3'),('B','C','IP2','N2'),('B','C','IP3','N3'),('D','F','IP4','N4')]

假设'A','B'位于('A','B','IP1','N1'),('A','B','IP3','N3') 然后我们需要将两个元组合并为一个元组并替换 ('A','B','IP1','N1'),('A','B','IP3','N3')('A','B','IP1','N1','IP3','N3')some_list

结果:

some_list = [('A','B','IP1','N1','IP3','N3'), ('B','C','IP2','N2','IP3','N3'), ]

应该来,但要确保不是“A”、“B”、“C”……无论如何,每次都不会相同

你能帮我吗?

最佳答案

基本上,您需要为两个值创建一个元组键,并用它创建一个默认字典。

扩展每个键的列表的其余部分,并通过将键(作为列表)添加到值来将键/值对转换回列表列表

像这样:

import collections

some_list = [('A','B','IP1','N1'),('A','B','IP3','N3'),('B','C','IP2','N2'),('B','C','IP3','N3'),('D','F','IP4','N4')]

c = collections.defaultdict(list)
for k1,k2,*b in some_list:   # extended iterable unpacking allows this
    c[(k1,k2)].extend(b)  # add to existing list or create a new one

result = [a+tuple(b) for a,b in c.items()]

结果:

>>> result
[('D', 'F', 'IP4', 'N4'),
 ('B', 'C', 'IP2', 'N2', 'IP3', 'N3'),
 ('A', 'B', 'IP1', 'N1', 'IP3', 'N3')]

for k1,k2,*b in some_list部分允许将前 2 个值放在单独的 k1 中和k2变量,以及 b 中的“其余”列表。此功能在 python 2 中不可用。Python 2 用户可以用更基本的循环替换:

for a in some_list:
    c[tuple(a[:2])].extend(a[2:])  # add to existing list or create a new one

(这个问题与核心部分的Merge tuples with the same key类似,但前后处理使其有所不同)

关于python - 我想将元组值添加到元组,如果该元组[0 :2] is repeated as shown below:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53362600/

相关文章:

python - 如何切割和 reshape /融化表格或 CSV 文件

python - 调试:获取调用函数的文件名和行号?

python - 在 Python 中删除列表中的重复字典

python - 添加两个列表的最佳方式?

haskell - 返回值的模式匹配

python - Plotly:如何使用下拉菜单在每日和每小时烛台之间进行更改?

python - 如何在 CKAN 2.2 中定义自定义验证器

c# - 实现具有 3 个或更多参数的排序机制

c# - List.Sort 使用 lambda 表达式

python - 从元组中获取一个值