[英]How to get comman data from two list of dictionaries based on having comman values for a specific key in both list's dictionaries?
First list of dictionaries:第一个字典列表:
ldic_1 = [{'personId': '2DHSJ32N2'}, {'personId': '8SHFJW7BA'}, {'personId': '2KS4BA0X9'}, {'personId': '2H84XKNH1'}, {'personId': '2H7QW2J4S'}, {'personId': '2HAY258CG'}]
Second list of dictionaries:第二个字典列表:
ldic_2 = [{'id': '2DHSJ32N2', 'fname': 'Adam'}, {'id': '8SHFJW7BA', 'fname': 'Smith'}, {'id': '2KS4BA0X9', 'fname': 'Lara'}, {'id': '2H7QW2J4S', 'fname': 'Kane'}, {'id': '2H84XKNH1', 'fname': 'Donald'}, {'id': '2H86CEQDG', 'fname': 'Nastya'}, {'id': '2H95F5D81', 'fname': 'Karolina'}, {'id': '2HA7GUKPQ', 'fname': 'Sara'}, {'id': '2H7TPXZSN', 'fname': 'Harry'}, {'id': '2HARDNGSW', 'fname': 'Joe'}, {'id': '2HAS95FR5', 'fname': 'Jill'}, {'id': '2HAY258CG', 'fname': 'David'}]
Whenever the value of "personId" of ldic_1 matches with the value of "id" of ldic_2 then the ldic_2 will get updated and the expected result will be:每当 ldic_1 的“personId”值与 ldic_2 的“id”值匹配时,ldic_2 将得到更新,预期结果将是:
ldic_2 = [{'id': '2DHSJ32N2', 'fname': 'Adam'}, {'id': '8SHFJW7BA', 'fname': 'Smith'}, {'id': '2KS4BA0X9', 'fname': 'Lara'}, , {'id': '2H7QW2J4S', 'fname': 'Kane'}, {'id': '2H84XKNH1', 'fname': 'Donald'}, {'id': '2HAY258CG', 'fname': 'David'}]
I don't know how to do this.我不知道该怎么做。 Please help and thanks.
请帮助和感谢。
This would be an effective way of solving this (assuming that id
is unique):这将是解决此问题的有效方法(假设
id
是唯一的):
ldic_1 = [{'personId': '2DHSJ32N2'}, {'personId': '8SHFJW7BA'}, {'personId': '2KS4BA0X9'}, {'personId': '2H84XKNH1'},
{'personId': '2H7QW2J4S'}, {'personId': '2HAY258CG'}]
ldic_2 = [{'id': '2DHSJ32N2', 'fname': 'Adam'}, {'id': '8SHFJW7BA', 'fname': 'Smith'},
{'id': '2KS4BA0X9', 'fname': 'Lara'}, {'id': '2H8C3J8VD', 'fname': 'Kane'},
{'id': '2H84XKNH1', 'fname': 'Donald'}, {'id': '2H86CEQDG', 'fname': 'Nastya'},
{'id': '2H95F5D81', 'fname': 'Karolina'}, {'id': '2HA7GUKPQ', 'fname': 'Sara'},
{'id': '2H7TPXZSN', 'fname': 'Harry'}, {'id': '2HARDNGSW', 'fname': 'Joe'},
{'id': '2HAS95FR5', 'fname': 'Jill'}, {'id': '2HAY258CG', 'fname': 'David'}]
adict = {elem['id']: elem for elem in ldic_2}
result = []
for elem in ldic_1:
if elem['personId'] in adict:
result.append(adict[elem['personId']])
# if you want one-liner:
# result = [adict[elem['personId']] for elem in ldic_1 if elem['personId'] in adict]
Output: Output:
[{'id': '2DHSJ32N2', 'fname': 'Adam'}, {'id': '8SHFJW7BA', 'fname': 'Smith'}, {'id': '2KS4BA0X9', 'fname': 'Lara'}, {'id': '2H84XKNH1', 'fname': 'Donald'}, {'id': '2HAY258CG', 'fname': 'David'}]
set_of_ids = {dic['personId'] for dic in ldic_1}
for dic in ldic_2:
if dic['id'] in set_of_ids:
del dic['fname']
Output: Output:
[{'id': '2DHSJ32N2'},
{'id': '8SHFJW7BA'},
{'id': '2KS4BA0X9'},
{'id': '2H8C3J8VD', 'fname': 'Kane'},
{'id': '2H84XKNH1'},
{'id': '2H86CEQDG', 'fname': 'Nastya'},
{'id': '2H95F5D81', 'fname': 'Karolina'},
{'id': '2HA7GUKPQ', 'fname': 'Sara'},
{'id': '2H7TPXZSN', 'fname': 'Harry'},
{'id': '2HARDNGSW', 'fname': 'Joe'},
{'id': '2HAS95FR5', 'fname': 'Jill'},
{'id': '2HAY258CG'}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.