我想合并具有重复名称的组的年龄列表...
我的代码:
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)
算法(因为 in
在 list
是 O(N)
但在 set
中是 O(1)
。
如果您缺少 key ,只需将 dic1[k]
替换为 dic1.get(k,[])
甚至 dic1.get(k ) 或 []
。
关于python - 将字典列表中的两个列表合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54415431/