猿问

比较 2 个列表并将值附加到新的字典列表

我是 python 初学者,当列表 v2 中的值等于字典 v1 列表的键时,试图返回一个新的字典 v3 列表。字典 v3 的新列表应该包含匹配的键和值。


v1 = [

    {"Key": "State", "Value": "UP"},

    {"Key": "city", "Value": "bihar"},

    {"Key": "Name", "Value": "Sam"},

    {"Key": "Product", "Value": "cookies"},

    {"Key": "id", "Value": "23"},

    {"Key": "email", "Value": "enim@gmail.com"},

]

v2 = ["Name", "Product", "State", "Name"]

v3 = []

预期的输出应该是


v3 = [

    {"Key": "Name", "Value": "Sam"},

    {"Key": "Product", "Value": "cookies"},

    {"Key": "State", "Value": "UP"},

    {"Key": "Name", "Value": "Sam"},

]

下面是我试过的代码,但代码不完整


for bb in v1:

    if bb['Key'] in v2:

        v3.append({bb['Key']:bb['Value']})


有只小跳蛙
浏览 163回答 4
4回答

牧羊人nacy

您可以尝试列表理解:v3=[dc for val  in v2 for dc in v1 if val==dc['Key']]输出:v3 [{'Key': 'Name', 'Value': 'Sam'}, {'Key': 'Product', 'Value': 'cookies'}, {'Key': 'State', 'Value': 'UP'}, {'Key': 'Name', 'Value': 'Sam'}]

呼啦一阵风

对于预期的输出,您需要反转循环顺序,首先循环 v2 列表,然后检查该键是否存在于 V1 中。for v in v2:    for d in v1:      if d["Key"] == v:         v3.append(d)       

九州编程

列表理解可能会有所帮助。尝试这个:[i for i in v1 if i['Key'] in v2]结果:[{'Key': 'State', 'Value': 'UP'}, {'Key': 'Name', 'Value': 'Sam'}, {'Key': 'Product', 'Value': 'cookies'}]说到预期的 v3,我不确定为什么{'Key': 'Name', 'Value': 'Sam'}当该元素在 v1 中只出现一次时出现两次。也许错别字?已编辑[i for j in v2 for i in v1 if i['Key'] == j]结果:[{'Key': 'Name', 'Value': 'Sam'}, {'Key': 'Product', 'Value': 'cookies'}, {'Key': 'State', 'Value': 'UP'}, {'Key': 'Name', 'Value': 'Sam'}]

陪伴而非守候

尝试像下面这样重构你的第一个字典:v1 = {'State': 'UP', 'city': 'bihar','Name': 'Sam','Product': 'cookies', 'id': '23', 'email': 'enim@gmail.com'}v2 = ['Name', 'Product', 'State','Name']v3 = dict()for x in v2:    if x in v1:        print({x: v1.get(x)})        v3.update({x: v1.get(x)})update 添加记录或在键可用时更新记录,{} 是另一种构造字典的方式来源: https: //docs.python.org/3/tutorial/datastructures.html
随时随地看视频慕课网APP

相关分类

Python
我要回答