从两个词典列表创建新的词典列表

时间:2020-10-18 20:23:33

标签: python python-3.x list dictionary

我有两个词典列表,并想从现有的两个词典列表中创建新的词典列表。 dict1包含有关人员的所有详细信息(pid,pname,pscore,sid)和dict2包含有关城市人员的详细信息(pid,cid,cscore),因此希望创建新的词典列表,其中dict1的pid与dict2的pid匹配并添加pid,来自两个字典列表的pname,pscore,cscore,匹配发生在new_dict列表中。任何帮助将不胜感激。预先感谢。

   dict1 = [{'pid': [7830351800, 8756822045, 7985031822, 8882181833],
  'pname': ['ABC', 'XYZ', 'QWE', 'MNQ'],
  'pscore': [0.8, 0.8, 0.8, 0.8],
  'sid': 8690694}]
 dict2 = [{'pid': 7830351800, 'cid': [1, 2, 3, 4], 'cscore': [0.8, 0.78, 0.7, 0.45]},
 {'pid': 8756822045, 'cid': [5, 6, 7, 8], 'cscore': [0.9, 0.88, 0.8, 0.75]},
 {'pid': 7985031822, 'cid': [9, 10, 11, 12], 'cscore': [0.5, 0.48, 0.3, 0.25]},
 {'pid': 8882181833, 'cid': [2, 13, 14, 15], 'cscore': [0.6, 0.58, 0.5, 0.45]}]
   new_dict = [{'pid': 7830351800,
  'pname': 'ABC',
  'pscore': 0.8,
  'cid': [1, 2, 3, 4],
  'cscore': [0.8, 0.78, 0.7, 0.45]},
 {'pid': 8756822045,
  'pname': 'XYZ',
  'pscore': 0.8,
  'cid': [5, 6, 7, 8],
  'cscore': [0.9, 0.88, 0.8, 0.75]},
 {'pid': 7985031822,
  'pname': 'QWE',
  'pscore': 0.8,
  'cid': [9, 10, 11, 12],
  'cscore': [0.5, 0.48, 0.3, 0.25]},
 {'pid': 8882181833,
  'pname': 'MNQ',
  'pscore': 0.8,
  'cid': [2, 13, 14, 15],
  'cscore': [0.6, 0.58, 0.5, 0.45]}]

我尝试了下面的代码,但遇到错误。我不明白如何解决这个问题。刚开始学习python:

new_dict = {}
for k, v in dict1[0].items():
    if v[0] in dict2[0]['pid']:
        new_dict = dict({'pid': v[0], 'pname' :v[0], 'pscore':v[0], 'cid':dict2[0]['cid'], 'cscore':dict2[0]['score']})
        print(new_dict)

1 个答案:

答案 0 :(得分:1)

dict1 = dict1[0]

pname_dict = {key:value for key,value in zip(dict1['pid'], dict1['pname'])}
pscore_dict = {key:value for key,value in zip(dict1['pid'], dict1['pscore'])}
ans = dict2.copy()

for d in ans:
    d['pname'] = pname_dict[d['pid']]
    d['pscore'] = pscore_dict[d['pid']]

输出:

>> ans

[{'pid': 7830351800,
  'cid': [1, 2, 3, 4],
  'cscore': [0.8, 0.78, 0.7, 0.45],
  'pname': 'ABC',
  'pscore': 0.8},
 {'pid': 8756822045,
  'cid': [5, 6, 7, 8],
  'cscore': [0.9, 0.88, 0.8, 0.75],
  'pname': 'XYZ',
  'pscore': 0.8},
 {'pid': 7985031822,
  'cid': [9, 10, 11, 12],
  'cscore': [0.5, 0.48, 0.3, 0.25],
  'pname': 'QWE',
  'pscore': 0.8},
 {'pid': 8882181833,
  'cid': [2, 13, 14, 15],
  'cscore': [0.6, 0.58, 0.5, 0.45],
  'pname': 'MNQ',
  'pscore': 0.8}]

创建2个字典以匹配pid ->pnamepid->pscore。这些字典用于将其他两个键值添加到dict2