[英]How to replace a value for a key in dictionaries of a list based on another dictionary?
Here's a sample of the data:以下是数据示例:
[{
'name': 'Age',
'p_value': '<0.001',
'ks_score': '0.07',
},
{
'name': 'peer_LM_Mean_SelfAware',
'p_value': '<0.001',
'ks_score': '0.06',
}]
I have over 16k dictionaries with several items in the list.我有超过 16k 的字典,列表中有几个项目。 What I want to do is replace the value of
name
in this dictionary from another dictionary which consists of the old name and new name.我想要做的是从另一个由旧名称和新名称组成的字典中替换该字典中
name
的值。
col_rename_list = {'Male': 'Male, n (%)',
'Age': 'Age, years',
'Baby_Boomers__1946_1964_': 'Baby Boomers (1946-1964), n (%)',
'Generation_X__1965_1980_': 'Generation X (1965-1980), n (%)',
'Generation_Y___Millennials__1981_1996_': 'Generation Y/Millennials (1981-1996), n (%)',
'Race_Asian': 'Asian, n (%)',
'peer_LM_Mean_SelfAware': 'Self-Awareness'
}
How can I do this?我怎样才能做到这一点? One way that I could think of is the following:
我能想到的一种方法如下:
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)
This works, but is there a better and efficient way to do this?这行得通,但是有没有更好更有效的方法来做到这一点?
You can use dict.get
with with default parameter:您可以将
dict.get
与默认参数一起使用:
lst = [
{
"name": "Age",
"p_value": "<0.001",
"ks_score": "0.07",
},
{
"name": "peer_LM_Mean_SelfAware",
"p_value": "<0.001",
"ks_score": "0.06",
},
]
col_rename_list = {
"Male": "Male, n (%)",
"Age": "Age, years",
"Baby_Boomers__1946_1964_": "Baby Boomers (1946-1964), n (%)",
"Generation_X__1965_1980_": "Generation X (1965-1980), n (%)",
"Generation_Y___Millennials__1981_1996_": "Generation Y/Millennials (1981-1996), n (%)",
"Race_Asian": "Asian, n (%)",
"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)
Prints:印刷:
[{'ks_score': '0.07', 'name': 'Age, years', 'p_value': '<0.001'},
{'ks_score': '0.06', 'name': 'Self-Awareness', 'p_value': '<0.001'}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.