簡體   English   中英

如何根據兩個列表字典中特定鍵的comman值從兩個字典列表中獲取comman數據?

[英]How to get comman data from two list of dictionaries based on having comman values for a specific key in both list's dictionaries?

第一個字典列表:

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

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

我不知道該怎么做。 請幫助和感謝。

這將是解決此問題的有效方法(假設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:

[{'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:

[{'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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM