这里我有列表
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/