首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >根据ID关联2个列表

根据ID关联2个列表
EN

Stack Overflow用户
提问于 2021-02-26 17:39:17
回答 3查看 29关注 0票数 0

我正在尝试按ID合并2个列表中的数据:

代码语言:javascript
运行
复制
list_a = [
(u'65d92438497c', u'compute-0'), 
(u'051df48db621', u'compute-4'), 
(u'd6160db0cbcd', u'compute-3'), 
(u'23fc20b59bd6', u'compute-1'), 
(u'0db2e733520d', u'controller-1'), 
(u'89334dac8a59', u'compute-2'), 
(u'51cf9d50b02e', u'compute-5'), 
(u'f4fe106eaeab', u'controller-2'), 
(u'06cc124662dc', u'controller-0')
]

list_b = [
(u'65d92438497c', u'p06619'), 
(u'051df48db621', u'p06618'), 
(u'd6160db0cbcd', u'p06620'), 
(u'23fc20b59bd6', u'p06622'), 
(u'0db2e733520d', u'p06612'), 
(u'89334dac8a59', u'p06621'), 
(u'51cf9d50b02e', u'p06623'), 
(u'f4fe106eaeab', u'p06611'), 
(u'06cc124662dc', u'p06613')
]

list_ab = [
(u'65d92438497c', u'p06619', u'compute-0'), 
(u'051df48db621', u'p06618', u'compute-4'), 
(u'd6160db0cbcd', u'p06620', u'compute-3'), 
(u'23fc20b59bd6', u'p06622', u'compute-1'), 
(u'0db2e733520d', u'p06612', u'controller-1'), 
(u'89334dac8a59', u'p06621', u'compute-2'), 
(u'51cf9d50b02e', u'p06623', u'compute-5'), 
(u'f4fe106eaeab', u'p06611', u'controller-2'), 
(u'06cc124662dc', u'p06613', u'controller-0')
]

您可以看到ID中的第一个字段,在list_a和list_b之间完全相同,我需要合并这个值

我不确定计算需要哪种类型的数据,这样做的目的是从'p06619‘中找到’result_ab -0‘,所以也许有比合并更好的方法。

EN

回答 3

Stack Overflow用户

发布于 2021-02-26 17:44:25

您正在使用包含元组的一维列表,它可能不是必需的。无论如何,要获得您需要的输出:

代码语言:javascript
运行
复制
list_a = [(u'65d92438497c', u'compute-0')]

list_b = [(u'65d92438497c', u'p-06619')]

result_ab = None

if list_a[0][0] == list_b[0][0]:
    result_ab = [tuple(list(list_a[0]) + list(list_b[0][1:]))]
票数 0
EN

Stack Overflow用户

发布于 2021-02-26 18:21:06

以下是我的解决方案:

代码语言:javascript
运行
复制
merge = []
for i in range(0,len(list_a)):
    if list_a[i][0] == list_b[i][0]:
        merge.append([tuple(list(list_a[i]) + list(list_b[i][1:]))])
票数 0
EN

Stack Overflow用户

发布于 2021-02-26 18:29:04

其思想是创建一个字典,其中键作为列表的第一个元素,值作为列表对象,所有元素都与该键匹配。

接下来,只需迭代字典并创建所需的新列表对象:

代码语言:javascript
运行
复制
from collections import defaultdict
res = defaultdict(list)
for elt in list_a:
    res[elt[0]].extend([el for el in elt[1:]])
   
for elt in list_b:
    res[elt[0]].extend([el for el in elt[1:]])

list_ab = []
for key, value in res.items():
    elt = tuple([key, *[val for val in value]])
    list_ab.append(elt)
print(list_ab)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66383343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档