繁体   English   中英

使用旧字典列表中的值创建新的字典列表

[英]Create a new list of dictionaries using values from an old list of dictionaries

如何仅使用旧字典列表中的值创建新的字典列表? 本质上,我需要新列表“new_list_of_dicts”如下所示。

old_list_of_dicts = [{'vid': 'transpower_036', 'name': '221_02_PB_520_REF_174050'}, {'vid': 'transpower_065', 'name': '222_05_KAL_T2E_YT_344991'}, {'vid': 'transpower_156', 'name': '226_02_INTL_PRSTR_ET_499802'}, {'vid': 'transpower_162', 'name': '226_FL01_KAL_DCE_FL_050232'}, {'vid': 'transpower_157', 'name': '226_FL02_KAL_DCE_FL_050234'}, {'name': '226_FL03_KAL_DCE_FL_050233', 'vid': 'transpower_163'}, {'vid': 'transpower_159', 'name': '226_XX_INTL_PRSTR_ET_499801'}, {'vid': 'transpower_161', 'name': '226_XX_KAL_T2E_YT_346321'}]

new_list_of_dicts = [{'transpower_036': '221_02_PB_520_REF_174050'}, {'transpower_065': '222_05_KAL_T2E_YT_344991'}, {'transpower_156': '226_02_INTL_PRSTR_ET_499802'}, {'transpower_162': '226_FL01_KAL_DCE_FL_050232'}, {'transpower_157': '226_FL02_KAL_DCE_FL_050234'}, {'226_FL03_KAL_DCE_FL_050233': 'transpower_163'}, {'transpower_159': '226_XX_INTL_PRSTR_ET_499801'}, {'transpower_161': '226_XX_KAL_T2E_YT_346321'}]

如果old_list_of_dicts中的每个字典都有两个值,你可以这样做:

new_list_of_dicts = [dict([d.values()]) for d in old_list_of_dicts]
print(new_list_of_dicts)

印刷:

[
    {"transpower_036": "221_02_PB_520_REF_174050"},
    {"transpower_065": "222_05_KAL_T2E_YT_344991"},
    {"transpower_156": "226_02_INTL_PRSTR_ET_499802"},
    {"transpower_162": "226_FL01_KAL_DCE_FL_050232"},
    {"transpower_157": "226_FL02_KAL_DCE_FL_050234"},
    {"226_FL03_KAL_DCE_FL_050233": "transpower_163"},
    {"transpower_159": "226_XX_INTL_PRSTR_ET_499801"},
    {"transpower_161": "226_XX_KAL_T2E_YT_346321"},
]

编辑:先前创建字典而不是列表的答案:

new_list_of_dicts = dict(d.values() for d in old_list_of_dicts)
print(new_list_of_dicts)

印刷:

{
    "transpower_036": "221_02_PB_520_REF_174050",
    "transpower_065": "222_05_KAL_T2E_YT_344991",
    "transpower_156": "226_02_INTL_PRSTR_ET_499802",
    "transpower_162": "226_FL01_KAL_DCE_FL_050232",
    "transpower_157": "226_FL02_KAL_DCE_FL_050234",
    "226_FL03_KAL_DCE_FL_050233": "transpower_163",
    "transpower_159": "226_XX_INTL_PRSTR_ET_499801",
    "transpower_161": "226_XX_KAL_T2E_YT_346321",
}

您可以使用理解来创建 new_list_of_dicts:

new_list_of_dicts = [{old['vid']: old['name']} for old in old_list_of_dicts]

尝试这个:


old_list_of_dicts = [{'vid': 'transpower_036', 'name': '221_02_PB_520_REF_174050'}, {'vid': 'transpower_065', 'name': '222_05_KAL_T2E_YT_344991'}, {'vid': 'transpower_156', 'name': '226_02_INTL_PRSTR_ET_499802'}, {'vid': 'transpower_162', 'name': '226_FL01_KAL_DCE_FL_050232'}, {'vid': 'transpower_157', 'name': '226_FL02_KAL_DCE_FL_050234'}, {'name': '226_FL03_KAL_DCE_FL_050233', 'vid': 'transpower_163'}, {'vid': 'transpower_159', 'name': '226_XX_INTL_PRSTR_ET_499801'}, {'vid': 'transpower_161', 'name': '226_XX_KAL_T2E_YT_346321'}]

new_list_of_dicts = [{d["vid"]: d["name"]} for d in old_list_of_dicts]

使用operator.itemgetter

from operator import itemgetter

new_list_of_dicts = [dict([itemgetter('vid', 'name')(d)])
                     for d in old_list_of_dicts]

output:

[{'transpower_036': '221_02_PB_520_REF_174050'},
 {'transpower_065': '222_05_KAL_T2E_YT_344991'},
 {'transpower_156': '226_02_INTL_PRSTR_ET_499802'},
 {'transpower_162': '226_FL01_KAL_DCE_FL_050232'},
 {'transpower_157': '226_FL02_KAL_DCE_FL_050234'},
 {'transpower_163': '226_FL03_KAL_DCE_FL_050233'},
 {'transpower_159': '226_XX_INTL_PRSTR_ET_499801'},
 {'transpower_161': '226_XX_KAL_T2E_YT_346321'}]

如果您想要具有多个键的唯一字典,则可以选择:

from operator import itemgetter
new_list_of_dicts = dict(itemgetter('vid', 'name')(d)
                         for d in old_list_of_dicts)

Output:

{'transpower_036': '221_02_PB_520_REF_174050',
 'transpower_065': '222_05_KAL_T2E_YT_344991',
 'transpower_156': '226_02_INTL_PRSTR_ET_499802',
 'transpower_162': '226_FL01_KAL_DCE_FL_050232',
 'transpower_157': '226_FL02_KAL_DCE_FL_050234',
 'transpower_163': '226_FL03_KAL_DCE_FL_050233',
 'transpower_159': '226_XX_INTL_PRSTR_ET_499801',
 'transpower_161': '226_XX_KAL_T2E_YT_346321'}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM