我是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']})
答案 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添加记录或在密钥可用时更新它,并 {}是构建字典的另一种方式
答案 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'}]