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

时间:2020-07-15 10:24:32

标签: python python-3.x

我是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']})

4 个答案:

答案 0 :(得分:1)

您可以尝试使用列表理解:

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'}]

答案 1 :(得分:0)

对于预期的输出,您需要颠倒循环顺序,首先循环遍历v2列表,然后检查该密钥在V1中是否存在。

for v in v2:
    for d in v1:
      if d["Key"] == v:
         v3.append(d)       

答案 2 :(得分:0)

尝试像下面这样重组您的第一个字典:

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

答案 3 :(得分:0)

List comprehension可能会有帮助。

尝试一下:

[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'}]