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

标签 python python-3.x dictionary

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

我的代码:

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/

相关文章:

python - PySpark 中别名方法的用途是什么?

python - 如何使用 ctypes 读取具有自定义结构的 dll 的输出?

matlab - matlab中有双向映射吗?

python - 在 Spark 数据集上应用函数

python - sys.stdin 读什么?

python - 如何将字符串转换为日期对象并分别获取年、月和日?

windows-7 - Ephem 的 Python 包 *localtime()* 函数的奇怪行为

Python 3.3 C 字符串处理(wchar_t 与 char)

c++ - 如何返回 std::map 项目

python - 当我们删除一个项目时,字典会调整大小吗?