将值附加到嵌套字典中的列表中

时间:2020-03-18 21:26:23

标签: python

基本上我需要从d3d2填充d1

d1 = {'Spain':['Madrid,'Barcelona'],'France':['Paris','Nice'],'Germany':['Dortmund','Berlin']}
d2 = {'Madrid':[1,2]'Barcelona':[2],'Paris':[3,4],'Nice':[4],'Dortmund':[5],'Berlin':[6]}

所需的输出d3如下:

d3 = {'Spain':{'Madrid':[1,2]},{'Barcelona':[2]},'France':{'Paris':[3,4]},{'Nice':[4]},'Germany':{'Dortmund':{[5]},{'Berlin':[6]}}

我尝试跟随但没有运气,我被困住了

l = []
def getKeysByValue(dictOfElements, valueToFind):
    listOfKeys = list()
    listOfItems = dictOfElements.items()
    for item  in listOfItems:
    if item[1] == valueToFind:
        listOfKeys.append(item[0])
    return listOfKeys

for i in d2.keys():
    for j in d1.values():
        if i in j:
            name = str(getKeysByValue(d1,j))
            l.append({i:name2})
            d3[name] = l
print(d3)

3 个答案:

答案 0 :(得分:1)

您可以使用dict理解来实现此目的。

d1 = {'Spain': ['Madrid','Barcelona'],
      'France': ['Paris','Nice'],
      'Germany': ['Dortmund','Berlin']}

d2 = {'Madrid': [1,2],
      'Barcelona': [2],
      'Paris': [3,4],
      'Nice': [4],
      'Dortmund': [5],
      'Berlin':[6]}

d3 = {k: {city: d2[city] for city in v} for k, v in d1.items()}

它正在遍历d1的键和值。对于每个键,该值都是一个字典,以值列表中的每个元素作为键,并以该键的d2值作为值。

答案 1 :(得分:1)

您可以像这样简单地创建d3

d1 = {'Spain':['Madrid','Barcelona'],'France':['Paris','Nice'],'Germany':['Dortmund','Berlin']}

d2 = {'Madrid':[1,2],'Barcelona':[2],'Paris':[3,4],'Nice':[4],'Dortmund':[5],'Berlin':[6]}


d3 = {country:{city:d2[city] for city in cities} for (country,cities) in d1.items()}

print(d3)

输出:

{'Spain': {'Madrid': [1, 2], 'Barcelona': [2]}, 'France': {'Paris': [3, 4], 'Nice': [4]}, 'Germany': {'Dortmund': [5], 'Berlin': [6]}}

我已拥有更正您的数据源的自由。

答案 2 :(得分:-1)

d1 = {'西班牙':['马德里','巴塞罗那'],'法国':['巴黎','尼斯'],'德国':['多特蒙德','柏林']}

d2 = {'马德里':[1,2],'巴塞罗那':[2],'巴黎':[3,4],'尼斯':[4],'多特蒙德':[5], '柏林':[6]} d3 = {}

对于d1.items()中的k,v:

data = {}

    for item in v:

        if item in d2:    #  to escape from an KeyError from d2 dictionary

            data[item] = d2[item]

 d3[k] = data