我有两个这样的字典:
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
答案 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()}
k
中的每个键(xs
)和值(d1
)。x
中的每个项目xs
,如果d2
包含d2
,我们就会找到一条通过x
的路径。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));
}
}