根据其他两个字典创建字典,它们之间具有相似性

时间:2020-06-15 20:25:43

标签: 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']}

所以我开发了这段代码,但是当我添加值时,它不起作用

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

4 个答案:

答案 0 :(得分:1)

您只需要遍历词典之一:

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, []))

答案 1 :(得分:1)

单线。 :D

{k: [y for x in xs if x in d2 for y in d2[x]] for k, xs in d1.items()}
  1. 我们遍历k中的每个键(xs)和值(d1)。
  2. 对于x中的每个项目xs,如果d2包含d2,我们就会找到一条通过x的路径。
  3. 我们使用y ... for y in d2[x]拼合结果列表。

这是另一种格式化它的方式,可能更容易理解:

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

答案 2 :(得分:0)

使用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']]})

答案 3 :(得分:-1)

另一种单线:

import java.util.LinkedList;

public class CargoDeliveryBase {
  private LinkedList<Cargo> transports;

  CargoDeliveryBase(LinkedList<? extends CargoTransport> t) {
    transports = new LinkedList<Cargo>();

      transports.add(new CargoShip());
      // or
      transports.add(new Truck());
      // or
      transport.add(t.get(0));
  }
}
相关问题