gpt4 book ai didi

python - 将字典列表中的两个列表合并为一个

转载 作者:太空宇宙 更新时间:2023-11-04 04:21:34 31 4
gpt4 key购买 nike

我想合并具有重复名称的组的年龄列表...

我的代码:

dic1 = {'g1': ['45', '35', '56', '65'], 'g2': ['67', '76'], 'g3':['8', '96']}
dic2 = {'g1': ['akshay', 'swapnil', 'parth','juhi'], 'g2': ['megha', 'varun'], 'g3': ['gaurav', 'parth']}

for key2,name_list in dic2.items():
for name in name_list:
if name=='parth':
for key1,age_list in dic1.items():
if key1==key2:
print(age_list)

输出是:

['45', '35', '56', '65']
['8', '96']

我希望输出为:

['45', '35', '56', '65', '8', '96']

有人可以帮我解决这个问题吗?

最佳答案

还有比这更多的 pythonic,您需要链接列表。另外,不需要那么多循环。一条线就可以了。

dic1 = {'g1': ['45', '35', '56', '65'], 'g2': ['67', '76'], 'g3':['8', '96']}
dic2 = {'g1': ['akshay', 'swapnil', 'parth','juhi'], 'g2': ['megha', 'varun'], 'g3': ['gaurav', 'parth']}

import itertools
result = list(itertools.chain.from_iterable(dic1[k] for k,v in dic2.items() if 'parth' in v))


>>> result
['45', '35', '56', '65', '8', '96']

没有 itertools 的变体是:

result = [x for k,v in dic2.items() if 'parth' in v for x in dic1[k]]

用集合字典代替列表字典:

dic2 = {'g1': {'akshay', 'swapnil', 'parth','juhi'}, 'g2': {'megha', 'varun'}, 'g3': {'gaurav', 'parth'}}

那些将你的 O(N**3) 算法变成了 O(N) 算法(因为 inlistO(N) 但在 set 中是 O(1)

如果您缺少 key ,只需将 dic1[k] 替换为 dic1.get(k,[]) 甚至 dic1.get(k ) 或 []

关于python - 将字典列表中的两个列表合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54415431/

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