給定兩個字典串列:
students = [
{"id": 1, "name": "A"},
{"id": 2, "name": "B"},
{"id": 99, "name": "C"},
{"id": 4, "name": "D"},
{"id": 101, "name": "E"},
]
classes = [
{"id": 1, "students": [1, 99]},
{"id": 2, "students": [1, 99, 101, 4]},
{"id": 3, "students": [4, 101]},
]
該classes串列具有帶有students鍵的字典,該鍵的值也是一個串列,例如的第[1, 99]一個字典{"id": 1, "students": [1, 99]}。每當key 與 key 中存在的整數匹配時,classes我想[1,99]用字典替換這些數字。studentsidstudentsstudents
例如,第一個結果是 : {"id": 1, "students": [{"id": 1, "name": "A"}, {"id": 99, "name": "C"}]}。
這是我的嘗試,但我沒有做對:
d = defaultdict(dict)
for l in (students, classes):
for elem in l:
d[elem['id']].update(elem)
l3 = d.values()
print(l3)
uj5u.com熱心網友回復:
創建一個映射id-> 學生字典。通過這種方式,我們可以將id存在的 s映射classes['student']到相應的學生字典。
id_to_student = {dct["id"]: dct for dct in students}
# {1: {'id': 1, 'name': 'A'},
# 2: {'id': 2, 'name': 'B'},
# 99: {'id': 99, 'name': 'C'},
# 4: {'id': 4, 'name': 'D'},
# 101: {'id': 101, 'name': 'E'}}
# Now update `classes` dict
for dct in classes:
dct['students'] = [id_to_student[idx] for idx in dct['students']]
# [{'id': 1, 'students': [{'id': 1, 'name': 'A'}, {'id': 99, 'name': 'C'}]},
# {'id': 2, 'students': [{'id': 1, 'name': 'A'}, {'id': 99, 'name': 'C'}, {'id': 101, 'name': 'E'}, {'id': 4, 'name': 'D'}]},
# {'id': 3, 'students': [{'id': 4, 'name': 'D'}, {'id': 101, 'name': 'E'}]}]
uj5u.com熱心網友回復:
我創建了一個空串列new_classes來存盤結果。然后我遍歷了classes串列中的每個字典。對于每個字典,我使用 獲取學生串列ids = dic['students'],然后使用串列理解來遍歷學生中的每個字典并檢查 id 是否與串列中的一個 id 匹配,如果匹配則保留 ( [i for i in students if i['id'] in ids]) 并替換 'students ' 結果在那個字典中的值。然后我將整個更新的字典附加到新串列中。完整代碼:
new_classes = []
for dic in classes:
ids = dic['students']
dic['students'] = [i for i in students if i['id'] in ids]
new_classes.append(dic)
輸出:
[{'id': 1, 'students': [{'id': 1, 'name': 'A'}, {'id': 99, 'name': 'C'}]},
{'id': 2,
'students': [{'id': 1, 'name': 'A'},
{'id': 99, 'name': 'C'},
{'id': 4, 'name': 'D'},
{'id': 101, 'name': 'E'}]},
{'id': 3, 'students': [{'id': 4, 'name': 'D'}, {'id': 101, 'name': 'E'}]}]
uj5u.com熱心網友回復:
也許是這樣的
from copy import deepcopy
from pprint import pprint
students = [
{"id": 1, "name": "A"},
{"id": 2, "name": "B"},
{"id": 99, "name": "C"},
{"id": 4, "name": "D"},
{"id": 101, "name": "E"},
]
classes = [
{"id": 1, "students": [1, 99]},
{"id": 2, "students": [1, 99, 101, 4]},
{"id": 3, "students": [4, 101]},
]
_classes = deepcopy(classes)
for idx, classe in enumerate(classes):
_classes[idx]['students'] = []
for i in classe['students']:
student = [x for x in students if x.get('id') == i]
_classes[idx]['students'].append(student[0])
classes = _classes
pprint(classes)
結果
[{'id': 1, 'students': [{'id': 1, 'name': 'A'}, {'id': 99, 'name': 'C'}]},
{'id': 2,
'students': [{'id': 1, 'name': 'A'},
{'id': 99, 'name': 'C'},
{'id': 101, 'name': 'E'},
{'id': 4, 'name': 'D'}]},
{'id': 3, 'students': [{'id': 4, 'name': 'D'}, {'id': 101, 'name': 'E'}]}]
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/469278.html
上一篇:如果嵌套python字典中的值具有相同的鍵,則對它們進行求和
下一篇:python字典最佳實踐
