gpt4 book ai didi

python - 如果 python 中的每个列表中都存在一个元素,如何有效地连接列表

转载 作者:行者123 更新时间:2023-11-28 21:31:07 25 4
gpt4 key购买 nike

我有如下 3 个列表。

mylist1 = [["present", [1,1,1]], ["trip", [1,1,1]], ["money", [1,8,6]], ["food", [6,6,6]], ["dog", [8,6,2]]]
mylist2 = [["cat", [8,8,8]], ["trip", [5,2,8]], ["present", [8,2,6]], ["parrot", [5]], ["dogs", [8]]]
mylist3 = [["dog", [8,5]], ["trip", [8]], ["present", [6]], ["tree", [6]], ["dogs", [8]]]

我想识别所有三个列表中共有的单词,并将它们的值合并到一个列表中。

所以,我的输出应该如下所示。

[["present", [[1,1,1], [8,2,6], [6]]], ["trip", [[1,1,1], [5,2,8], [8]]]]

我目前是这样操作的。

lists = [mylist1, mylist2, mylist3]
mywords = []
for mylist in lists:
for item in mylist:
mywords.append(item[0])

my_new_list = []
for word in mywords:
myflag = 1
myvalues = []
for mylist in lists:
mytemp = []
for item in mylist:
if word == item[0]:
mytemp = item[1]
myvalues.append(mytemp)

if len(mytemp) == 0:
myflag = 0

if myflag != 0:
my_new_list.append([word,myvalues])

但是,当我在每个列表中有大约 10000 个元素并且需要数小时才能运行时,这真的很低效。我想知道在 python 中是否有更有效的方法。

如果需要,我很乐意提供更多详细信息。

最佳答案

使用公共(public)元素作为 defaultdict 中的键包含您要合并的值的列表。
假设公共(public)元素在列表中出现的次数不超过一次,即没有重复项,并且考虑到您希望它出现在每个列表中的事实,这意味着合并列表中的元素数量必须相等列表的数量;每个列表一个元素。

from collections import defaultdict
d = defaultdict(list)
for L in lists:
for k, v in L:
d[k].append(v)
output = [[k, v] for k, v in d.items() if len(v) == len(lists)]

如果您想验证没有重复的假设,您可以使用 Counter :

from collections import Counter
from operator import itemgetter
for L in lists:
c = Counter(map(itemgetter(0), L)).values()
if any(v > 1 for v in c.values()):
print('Invalid list:', L)

关于python - 如果 python 中的每个列表中都存在一个元素,如何有效地连接列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58861562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com