2017-07-18 90 views
-1

我需要从list2list1与值更新字典值对 - 基于匹配key, valuepython3 - 两个列表 - 更新一个列表与匹配键,从另一个

编辑: 在这里,我不能拿字典中的密钥 - 这也需要一般。 条件是如果两个列表中都存在一个键值对 - 列表1需要使用列表2中的所有键值对进行更新 - 如果不匹配 - 它们需要保持不变。明天我可能需要更新FlexConnect的Fabric结构值。

list1 = [{ 
        "key": "wireless.fabric", 
        "value": "" 
        "descr": "" 
       }, 
       { 
        "key": "wireless.flexConnect", 
        "value": "" 
        "descr": "" 
       }, 
       { 
        "key": "wireless.primaryAuthServer", 
        "value": "" 
        "descr" : "" 
       }, 
       { 
        "key": "wireless.secondaryAuthServer", 
        "value": "" 
        "descr" : "" 

       }, 
       { 
        "key": "wireless.authMode", 
        "value": "central" 
        "descr": "" 
       } 
       ] 
list2 = [{ 
        "key": "wireless.primaryAuthServer", 
        "value": "1.1.1.1" 
        "descr": "primary server details" 
       }, 
       { 
        "key": "wireless.secondaryAuthServer", 
        "value": "2.2.2.2" 
        "descr": "secondary server details" 
       }] 

我有一个代码片段 - 但它给出了语法错误 - 任何帮助?

for d in list1: 
    if(d[k] == d1[k] for d1 in list2 for k in d): 
      d[k] = [d1[k] for d1 in list2 for k in d] 

第3行的语法错误!

+1

你有什么公平的人试过? –

+0

将你的'list2'变成'key => value'映射,然后遍历你的'list1'来更新匹配关键字和上述映射的值。 – zwer

+0

获得列表2中的键值对 - 如果列表1中存在相同的键值对 - 更新它 - 保留所有其他字典等。我无法做到这一点 - list2可以是任何子集list1--所以键值对也需要一概而论 –

回答

0

这不是一个简单的迭代吗?

for data1 in list1: 
    for data2 in list2: 
     if data1["key"] == data2["key"]: 
      data1["value"] = data2["value"] 
      break 

注意:我认为你代表的数据很差。一个更好的表现会是这样的:

dict2 = {"wireless.primaryAuthServer": "1.1.1.1", "wireless.secondaryAuthServer": "2.2.2.2"} 
+0

我不能直接拿“key”,“value” - 它可以是任何东西 - 但所有字典都是相同的 –

+0

输入是自动生成的。我需要遍历这两个我无法改变的列表。 –

+0

@RanjuSunil为什么不从生成的输入中创建新的词典? –

0

答案是:

在列表2项: 索引,物品1在枚举(列表1):在item.keys 关键(): 如果键入item1.keys(): if item1 [key] == item [key]: list1 [index] = item print(list1)

相关问题