Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从其他两个字典中创建一个相似的字典_Python_Dictionary - Fatal编程技术网

Python 从其他两个字典中创建一个相似的字典

Python 从其他两个字典中创建一个相似的字典,python,dictionary,Python,Dictionary,我有两本这样的字典: dict1= {'MO': ['N-2', 'N-8', 'N-7', 'N-6', 'N-9'], 'MO2': ['N0-6'], 'MO3': ['N-2']} dict2= {'N-2': ['NUMBER1'], 'N0-6': ['NUMBER16'], 'N-9': ['NUMBER33'] 我想创建一本这样的词典 dict3={'MO'['NUMBER1','NUMBER33'], 'MO2':['NUMBER16']} 所以我开发了这段代码,但是当我添

我有两本这样的字典:

dict1= {'MO': ['N-2', 'N-8', 'N-7', 'N-6', 'N-9'], 'MO2': ['N0-6'], 'MO3': ['N-2']}
dict2= {'N-2': ['NUMBER1'], 'N0-6': ['NUMBER16'], 'N-9': ['NUMBER33']
我想创建一本这样的词典

dict3={'MO'['NUMBER1','NUMBER33'], 'MO2':['NUMBER16']}
所以我开发了这段代码,但是当我添加值时,它不起作用

for ki, vi in dict2.items():
    for key, value in (itertools.chain.from_iterable([itertools.product((k, ), v) for k, v in dict3.items()])):
        if (ki == v):
            print vi

用defatuldict试试这个

from collections import defaultdict
d =defaultdict(list)
for k in dict1.keys():
    for value in dict1[k]:
        temp = dict2.get(value)
        if temp:
            d[k].append(temp)
输出

defaultdict(list,
            {'MO': [['NUMBER1'], ['NUMBER33']],
             'MO2': [['NUMBER16']],
             'MO3': [['NUMBER1']]})

您只需循环使用其中一个字典:

dict1= {'MO': ['N-2', 'N-8', 'N-7', 'N-6', 'N-9'], 'MO2': ['N0-6'], 'MO3': ['N-2']}
dict2= {'N-2': ['NUMBER1'], 'N0-6': ['NUMBER16'], 'N-9': ['NUMBER33']}
dict3 = {}
for key, subkeys in dict1.items():
    for subkey in subkeys:
        dict3.setdefault(key, []).extend(dict2.get(subkey, []))
一行D

{k: [y for x in xs if x in d2 for y in d2[x]] for k, xs in d1.items()}
  • 我们循环遍历
    d1
    中的每个键(
    k
    )和值(
    xs
  • 对于
    xs
    中的每个项目
    x
    ,如果
    d2
    包含
    x
    ,我们会找到通过
    d2
    的路径
  • 我们使用
    y。。。对于d2中的y[x]
  • 下面是另一种更容易理解的格式:

    {
        k: [
            y
            for x in xs if x in d2
            for y in d2[x]
        ]
        for k, xs in d1.items()
    }