如何根据另一个字典替换列表字典中键的值?

问题描述

以下是数据示例:

[{
  'name': 'Age','p_value': '<0.001','ks_score': '0.07',},{
  'name': 'peer_LM_Mean_SelfAware','ks_score': '0.06',}]

我有超过 16,000 部字典,列表中有几个项目。我想要做的是从另一个由旧名称和新名称组成的字典中替换此字典中 name 的值。

col_rename_list = {'Male': 'Male,n (%)','Age': 'Age,years','Baby_Boomers__1946_1964_': 'Baby Boomers (1946-1964),'Generation_X__1965_1980_': 'Generation X (1965-1980),'Generation_Y___Millennials__1981_1996_': 'Generation Y/Millennials (1981-1996),'Race_Asian': 'Asian,'peer_LM_Mean_SelfAware': 'Self-Awareness'
                  }

我该怎么做?我能想到的一种方法如下:

for d in dictionary_list:
    for k,v in d.items():
        if k == 'name':
            if col_rename_list.get(v) is not None:
                d[k] = col_rename_list.get(v)

这行得通,但有没有更好更有效的方法来做到这一点?

解决方法

您可以将 dict.get 与默认参数一起使用:

lst = [
    {
        "name": "Age","p_value": "<0.001","ks_score": "0.07",},{
        "name": "peer_LM_Mean_SelfAware","ks_score": "0.06",]

col_rename_list = {
    "Male": "Male,n (%)","Age": "Age,years","Baby_Boomers__1946_1964_": "Baby Boomers (1946-1964),"Generation_X__1965_1980_": "Generation X (1965-1980),"Generation_Y___Millennials__1981_1996_": "Generation Y/Millennials (1981-1996),"Race_Asian": "Asian,"peer_LM_Mean_SelfAware": "Self-Awareness",}

for d in lst:
    d["name"] = col_rename_list.get(d["name"],d["name"])

# pretty print:
from pprint import pprint
pprint(lst)

打印:

[{'ks_score': '0.07','name': 'Age,years','p_value': '<0.001'},{'ks_score': '0.06','name': 'Self-Awareness','p_value': '<0.001'}]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...