python - 将字典列表作为字典键的值
问题描述
我有以下字典列表。
p = [ {"Id": "47","Name": "l","Cate": "GD31","Mark": 0,"Code": "l"},
{"Id": "58","Name": "k","Cate": "GD33","Mark": 0,"Code": "k"},
{"Id": "40","Name": "j","Cate": "GD35","Mark": 0,"Code": "j"},
{"Id": "15","Name": "i","Cate": "GD37","Mark": 0,"Code": "i"},
{"Id": "39","Name": "h","Cate": "GD39","Mark": 0,"Code": "h"},
{"Id": "75","Name": "g","Cate": "LD31","Mark": 0,"Code": "g"},
{"Id": "12","Name": "f","Cate": "LD33","Mark": 0,"Code": "d"},
{"Id": "92","Name": "e","Cate": "LD35","Mark": 0,"Code": "e"},
{"Id": "42","Name": "d","Cate": "LD37","Mark": 0,"Code": "d"},
{"Id": "11","Name": "c","Cate": "LD39","Mark": 0,"Code": "c"},
{"Id": "51","Name": "b","Cate": "SWW","Mark": 0,"Code": "b"},
{"Id": "13","Name": "a","Cate": "SMM","Mark": 0,"Code": "a"} ]
在上面的字典中,我想根据等于 GD31 或 LD31 的“Cate”值将特定字典存储到某个变量中。我尝试过的是:
if any(d['Cate'] == 'GD31' or d['Cate'] == 'LD31' for d in p):
print('D31 present')
在上面的代码中,我只检查 GD31 或 LD31 是否存在。我需要将特定字典(其中“Cate”值等于 GD31 或 LD31)存储在某个变量中,并更新所选字典,如下所示:
new = [ { 'GD31':[{"Id":"47","Name_G":'l'}],
'LD31':[{"Id":"75","Name_L":'g'}] } ]
说明:如果 GD31 和 LD31 都存在,则将 GD31 和 LD31 作为键,将“Id, Name”作为值,然后将 GD31 的“Name”更新为“Name_G”,将 LD31 的“Name”更新为“Name_L”。
我期望结果为:
new = [ { 'GD31':[{"Id":"47","Name_G":'l'}],
'LD31':[{"Id":"75","Name_L":'g'}] } ]
解释:
如果找到 D31,请从字典列表中选择该特定字典。在那个特定的字典中取“Id”和“Name”。因此,GD31 和 LD31 是键,“Id, Name”是值。如果找到 D31,则将 GD31 的“Name”更新为“Name_G”,将 LD31 的“Name_L”更新为“Name_L”。***这适用于所有值 D33、D35、D37 和 D39
希望大家理解。有什么想法吗?
解决方案
尝试这个:
p = [{"Id": "47","Name": "l","Cate": "GD31","Mark": 0,"Code": "l"},
{"Id": "58","Name": "k","Cate": "GD33","Mark": 0,"Code": "k"},
{"Id": "40","Name": "j","Cate": "GD35","Mark": 0,"Code": "j"},
{"Id": "15","Name": "i","Cate": "GD37","Mark": 0,"Code": "i"},
{"Id": "39","Name": "h","Cate": "GD39","Mark": 0,"Code": "h"},
{"Id": "75","Name": "g","Cate": "LD31","Mark": 0,"Code": "g"},
{"Id": "12","Name": "f","Cate": "LD33","Mark": 0,"Code": "d"},
{"Id": "92","Name": "e","Cate": "LD35","Mark": 0,"Code": "e"},
{"Id": "42","Name": "d","Cate": "LD37","Mark": 0,"Code": "d"},
{"Id": "11","Name": "c","Cate": "LD39","Mark": 0,"Code": "c"},
{"Id": "51","Name": "b","Cate": "SWW","Mark": 0,"Code": "b"},
{"Id": "13","Name": "a","Cate": "SMM","Mark": 0,"Code": "a"} ]
new = [{d["Cate"]: [{"Id": d["Id"], "Name_" + d["Cate"][0]: d["Name"]}] for d in p if "D31" in d["Cate"]}]
print(new)
输出:
[{'GD31': [{'Id': '47', 'Name_G': 'l'}], 'LD31': [{'Id': '75', 'Name_L': 'g'}]}]
推荐阅读
- android - 凭据管理上的 Android 错误
- html - 如何重置父元素中的所有边距和填充?
- c# - wpf Datagrid 强制数据网格行评估
- wordpress - Wordpress 隔离菜单,在更改屏幕大小时
- json - jsgrid updateItem with asmx
- konvajs - How can I drag stage only x axis in Konva.js
- reactjs - 如何在 react-data-grid 中创建自定义行渲染器
- javascript - 检查图像尺寸 - Angular 5
- android - 如何滚动由 Cordova mfilechooser 插件触发的内部存储器的文件浏览器
- apache-kafka - Auto offset commit failed for group my_group_id in kafka confluent cluster